#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 4;
int *p = malloc(sizeof(int) * a);
int *g = malloc(sizeof(int) * a);
p += 8;
printf("%p\n", p);
printf("%p\n", g);
}
我已经运行这个程序好几次了,每次最后打印的p和g的值都是相同的。我不太确定为什么会发生这种情况 - 理论上 malloc 不能选择内存中的任何位置来让 p 和 g 指向?为什么 p + 8 总是等于 g?任何澄清将不胜感激。
谢谢!
我已经运行这个程序好几次了,每次最后打印的p和g的值都是相同的
这是因为你的内存分配方式不同。
第一个
malloc
为4个整数分配内存。假设它们各有 4 个字节,那么就是 16 个字节。
0 1 2 3
0123456789abdef0123456789abdef0123456789abdef0123456789abdef
^--------------
p
第二个
malloc
为另外4个整数分配内存。该内存可以分配在任何空闲插槽中,但它恰好是这样的。
0 1 2 3
0123456789abdef0123456789abdef0123456789abdef0123456789abdef
^-------------- ^--------------
p g
如果将 8 添加到
p
,则会将其移动 8 个整数的大小,即 32 个字节,即 g
。
间隙中的记忆里有什么?谁知道。可以按照
malloc
认为合适的方式分配内存。
但是,不能保证内存会以这种方式分配。在我的系统上
p += 4
工作意味着没有间隙。