本文讨论的是在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”的位置
你可以做这样一个测试;
结果是8;
结果还是 8;
能想到,再加入一个char,或两个char,结果还是 8
本文深入探讨了在Intel计算机上使用Windows系统时,C语言中的内存分配原理,包括数组元素在内存中的顺序、指针的加减运算与内存顺序的关系,以及整型变量在内存中的字节顺序与对齐方式。
808

被折叠的 条评论
为什么被折叠?



