- 浏览: 33854 次
- 性别:
-
最新评论
文章列表
冒泡排序:
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++指针和引用的区别,得到的结果大致如下:
1.指针和引用的定义和性质区别:
(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:
int a=1;int *p=&a;
int a=1;int &b=a;
上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。
而下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。
...
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 ...
直接上代码:
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 热
我们来看下面的例子:
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语言汇编代码分析(for循环)
- 博客分类:
- C语言
请看下面的例子
图片左边为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语言汇编代码分析(函数)
- 博客分类:
- C语言
C语言中的函数(或称为方法或者过程)是通过进程的栈空间来进行管理的,一个个函数在栈空间的表现就像是一幅一幅的图片,称为栈帧(stack frame)。其中寄存器%ebp始终指向栈帧的开始,而寄存器%esp则像游标一样在相邻两个栈帧中滑动来存取值。
下面以一个实际例子来说明:
由上图可知函数compare调用函数max, 不同颜色代表不同的栈帧,我们来开始分析汇编代码:
首先我们假设此时esp寄存器为某个值Vbase(上图中第二个箭头指向的位置);
pushl %ebp ;将%ebp寄存器的值入栈,此时Vesp = Vbase - 4;
movl %esp, %ebp; ...