我在 C 中尝试使用 malloc,发现 malloc 在分配了一些内存后浪费了一些空间。下面是我用来测试 malloc 的一段代码
#include <stdlib.h>
#include <string.h>
int main(){
char* a;
char* b;
a=malloc(2*sizeof(char));
b=malloc(2*sizeof(char));
memset(a,9,2);
memset(b,9,2);
return 0;
}
在下图的右中(为了清晰起见,请在新选项卡中打开图像)可以看到内存内容;0x804b008是变量'a'指向的地址,0x804b018是变量'b'指向的内存。从 0x804b00a 到 0x804b017 之间的内存发生了什么?问题是即使我尝试分配3*sizeof(char)
代替2*sizeof(char)
内存字节数的内存布局是一样的!那么,我缺少什么吗?
malloc()
允许浪费尽可能多的空间 - 标准没有指定anything关于实施。您拥有的唯一保证是对齐(§7.20.3 内存管理函数):
如果分配成功则返回的指针被适当对齐,以便它可以分配给指向任何类型对象的指针,然后用于访问分配的空间中的此类对象或此类对象的数组(直到空间被显式释放) 。
您的实现似乎返回最小 8 字节对齐的指针。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)