您的位置:首页 > 编程语言 > C语言/C++

c、c++在定义变量,数组时的内存布局及内存字节对齐

2010-06-22 17:43 399 查看
本文讨论的是在Intel机子上windows系统下的c内存分配
如图演示会更容易懂些。
1,数组元素在内存中的顺序
也请注意程序顺序与内存顺序的关系

int b=10;
int a[3]={1,2,3};
int c=11;

a的地址跟a[0]的地址一样,但是

指针的加减运算 以所指变量的大小为单位:
int(a+1)-int(a)=4;
int(&a+1)-int(a)=4*3=12;



2,int包含四个字节,那么这四个字节的顺序有时怎样的呢

int b=0x01020304;
char ch='a';

注意:变量b的高位在低字节中,而b的地址所指的就是最低的字节

我们知道有内存字节对齐这回事儿,变量 ch 就是被对齐了

这样 int(&b)-int(&ch)=4;

中间那三个字节是空闲的

但如果这样



int b=0x01020304;
char ch='a';
char ch1='a';
这时ch1紧靠着ch,也就是在“Not”的位置

你可以做这样一个测试;
struct S{
int i;
char c;
};

void main()
{
cout<<sizeof(S)<<endl;
}

结果是8;
struct S{
int i;
char c;
char c1;
};

void main()
{
cout<<sizeof(S)<<endl;
}

结果还是 8;

能想到,再加入一个char,或两个char,结果还是 8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐