我在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;
}
Run Code Online (Sandbox Code Playgroud)
在下图的右下方(为清晰起见,在新选项卡中打开图像),您可以看到内存内容; 0x804b008是变量'a'指向的地址,0x804b018是变量'b'指向的内存.从0x804b00a 0x804b017到内存发生了什么?即使我尝试分配3*sizeof(char)
而不是2*sizeof(char)
内存字节,内存布局是相同的!那么,有什么我想念的吗?
malloc()
允许浪费尽可能多的空间 - 标准没有指定任何有关实现的内容.唯一的保证是关于对齐(§7.20.3内存管理功能):
如果分配成功,则返回的指针被适当地对齐,以便可以将其指定给指向任何类型对象的指针,然后用于在分配的空间中访问此类对象或此类对象的数组(直到空间被显式释放) .
您的实现似乎返回最小8字节对齐的指针.
归档时间: |
|
查看次数: |
2344 次 |
最近记录: |