2016-03-03 45 views
1

我想知道为什么malloc总是分配一个大小为24 + 16n字节的内存区域?为什么malloc分配的内存大小是(24 + 16n)个字节?

在下面的代码无论BUFSIZE,通过malloc_usable_size报告的分配大小等于24 + 16的倍数,例如:24,40,56,72 ...

#include <cstdlib> 
#include <malloc.h> 
#include <iostream> 
#define BUFSIZE 20 
using namespace std; 

int main(int argv, char** argc) 
{ 
    char * buf = static_cast<char *> (malloc(BUFSIZE)); 
    size_t bufsize = malloc_usable_size(buf); 
    cout << "malloc_usable_size (buf) = " << bufsize << endl; 
    return 0; 
} 

回答

1

这是一个简单的页面表项头和你的libc/OS的分配粒度(似乎是16B)。

在其他系统上,这些数字可能不同。

相关问题