C中的malloc内存分配方案

nag*_*hna 4 c malloc

我在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)内存字节,内存布局是相同的!那么,有什么我想念的吗?

gdb接口

Car*_*rum 8

malloc()允许浪费尽可能多的空间 - 标准没有指定任何有关实现的内容.唯一的保证是关于对齐(§7.20.3内存管理功能):

如果分配成功,则返回的指针被适当地对齐,以便可以将其指定给指向任何类型对象的指针,然后用于在分配的空间中访问此类对象或此类对象的数组(直到空间被显式释放) .

您的实现似乎返回最小8字节对齐的指针.