假设我们使用以下方法为
int
类型的5个变量分配内存:
int* ptr = new int[5];
那么如果我是对的,分配内存的地址应该是随机的?例如:
如果 &ptr[0]
的地址比方说是 0x7fffa07f7560 那么 &ptr[1]
的地址应该是随机的而不是 0x7fffa07f7564.
只有当我们使用
int array[5];
在堆栈中分配内存时,我们才能获得相隔 4 个字节的连续地址。
不相关内存块的内存地址未指定,应视为实现细节。但是
int *ptr = new int[5]
分配了一个包含 5 个整数的数组的单个块。并且数组中的地址应该是连续的......(实际上是 C 标准 mandates 它们是。)
所以我们有以下等式:
&(ptr[1]) == &(ptr[0]) + 1
每个指针算术(void *) &(ptr[1]) == ((void *) &(ptr[0])) + sizeof(int)
用于字节地址