本文讨论的是在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