在后台使用 malloc 在堆上分配内存
Behind the scene allocation of memory on heap using malloc
如果一个进程在堆上请求 1-24 个字节,为什么会有 32 个字节的差异?
如果一个进程在堆上请求 25-40 个字节,为什么会有 48 个字节的差异?
如果进程在堆上请求 41-56 字节,为什么会有 64 字节的差异?
前8bytes用于保存分配内存的长度
#include <stdio.h>
#include<stdlib.h>
int main()
{
int size=41;
char* c = (char*) malloc(size);//initial 8bytes used for length
char* d = (char*) malloc(size);
printf("a = %p\nb = %p\n difference is %d\n",c,d,d-c);
free(c);
free(d);
}
通常函数 malloc 的实现方式是 returns 一段内存乘以等于 16 字节的段落大小(这个值可以等于 alignof(max_align_t)
的值) .也就是说,分配的内存必须与任何分配的对象对齐。
如果一个进程在堆上请求 1-24 个字节,为什么会有 32 个字节的差异?
如果一个进程在堆上请求 25-40 个字节,为什么会有 48 个字节的差异?
如果进程在堆上请求 41-56 字节,为什么会有 64 字节的差异?
前8bytes用于保存分配内存的长度
#include <stdio.h>
#include<stdlib.h>
int main()
{
int size=41;
char* c = (char*) malloc(size);//initial 8bytes used for length
char* d = (char*) malloc(size);
printf("a = %p\nb = %p\n difference is %d\n",c,d,d-c);
free(c);
free(d);
}
通常函数 malloc 的实现方式是 returns 一段内存乘以等于 16 字节的段落大小(这个值可以等于 alignof(max_align_t)
的值) .也就是说,分配的内存必须与任何分配的对象对齐。