`
文章列表
冒泡排序: int* bubbleSort(int* A, int n) { // write code here by Kean int len = n-1; for(int i = 0; i < n-1; (len--, i++)){ for(int j = 0; j < len; j++){ if(A[j] > A[j+1]){ int t = A[j]; A[j] = ...
今天接触到一道面试题,提供一个类,含有两个私有变量和一个virtual的析构函数,没有提供任何获取私有变量的公共方法,让提取私有变量。代码大致如下: class A { public: A(){} virtual ~A(){} private: int n; double f; };  我认为核心思路是利用C++的内存对象模型来提取,但是虚表指针(vptr)的位置因编译器的不同而不同,即要么放在最前面,要么放在最后面。所以上面的类A的内存模型可能为:  由于虚表指针(vptr)的位置不定,所以我们只有在确定了虚表指针位置后才能定位到私有变量的 ...
  version: the version of ip service, For IPv4, its value is 4, for IPV6, its value is 6. header length: the length of ip header, the maximum value is 60 because of using 4 bits representing the length. Generally, its value is 20.   type of service: the 8 bits are divided into 3 parts. the fi ...
From the book named <<Effective STL 50 Specific Ways to Improve Your Use of the Standard Template Library>>, I knew the suggestion of " Watch out the parsing mechanism of C++ compiler", which is the sixth suggestion in that book. This fact is because of C++ using the strategy ...

how to describe mood

A acomplished 有成效 aggrabated 尖锐 amused 有趣 angry 生气 annoyed 烦闷 anxious 焦虑 apathetic 无动于衷 artistic 艺术的 awake 清醒 B bored 无聊 bouncy 快活 busy 忙碌 C calm 镇静 cheerful 高兴 chipper 爽朗 cold 冷淡 complacent 自满 confused 困惑 contemplative 苦思冥想 content 满足 cranky 暴躁 crappy 讨厌 crazy 疯狂 creative 创意 curious 好奇 cy ...

C++指针和引用

    博客分类:
  • C++
首先,我在网上搜索了下C++指针和引用的区别,得到的结果大致如下: 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。 而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。 ...

函数返回值研究

    博客分类:
  • C++
1.基本类型的返回值 int add(int a, int b) { int c = 0; b = c++; return a+b; } int init() { int a = add(3, 4); return a; }  对应的汇编如下: .file "list initialization.cpp" .text .globl _Z3addii .type _Z3addii, @function _Z3addii: .LFB0: .cfi_startproc pushl %ebp .cfi ...

i++与++i研究

    博客分类:
  • C++
直接上代码: 1.++i int add(int a, int b) { int c = 0; b = ++c; return a+b; } int init() { int a = add(3, 4); return a; }  对应的汇编如下:   _Z3addii: .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi ...
  《中文菜单英文译法》 北京市人民政府外事办公室 目 录 Table of Contents 翻译的原则 Principles of Translation 中餐 Chinese Food 冷菜类 Cold Dishes 热

GWT国际化

    博客分类:
  • GWT
GWT国际化            
我们来看下面的例子:   switch-case控制语句维护着一张跳转表(jump table),并不是用一系列的if-else来实现,在上例中就是标签L7标 记的地方。   跳转表方式大体思想是这样的:   用case语句中的最大值减去最小值求出一个区间,这里是106-100 = 6,即 0到6共有7个可能的case,此时编译器 为该switch-case控制分配长度为7的数组,然后编译器再去查询哪些case是出现了的,就在数组中对应位置填上该 case的地址(即L3,L4,L9,L6),如果没有对应的case就填写default对应的地址(即L2)。最后在执行的时候,只要 ...
我们来看下面的例子:  我们将上一篇中for循环的例子改为while循环,然而生成的汇编代码却是一模一样的,这里就不在赘述了。有兴趣的朋友请查看《C语言汇编代码分析(for循环)》。  
请看下面的例子     图片左边为C语言代码,右边为对应的汇编代码,汇编代码有点多,我们着重关注用红色矩形框住的区域:   movl $0, %ecx; 将0赋值给%ecx寄存器,相当于源码中的第6行的i=0表达式,注意汇编采用%ecx作为循环             ;计数寄存器,相当于c源码中的变量i的作用   .L2; 汇编中称为标记,和c语言goto语句的参数意义相同,用于语句跳转时的位置标记   addl $1, %ecx; 将%ecx加1,相当于源码中的i++   cmpl $1000, %ecx;比较加1后%ecx寄存器的值与1000的大小,相当于源码中的 ...
1.Latest Mobile Tech News  2.TI 3.IDEA在线注册 4.时空隧道 5.voa learning english(needs VPN) 6.BBC(needs VPN) 7.Visual Studio Code 8.LESS 9. express 10.Git教程
C语言中的函数(或称为方法或者过程)是通过进程的栈空间来进行管理的,一个个函数在栈空间的表现就像是一幅一幅的图片,称为栈帧(stack frame)。其中寄存器%ebp始终指向栈帧的开始,而寄存器%esp则像游标一样在相邻两个栈帧中滑动来存取值。 下面以一个实际例子来说明:  由上图可知函数compare调用函数max, 不同颜色代表不同的栈帧,我们来开始分析汇编代码: 首先我们假设此时esp寄存器为某个值Vbase(上图中第二个箭头指向的位置);   pushl %ebp ;将%ebp寄存器的值入栈,此时Vesp = Vbase - 4;   movl %esp, %ebp; ...
Global site tag (gtag.js) - Google Analytics