调用 'malloc' 分配多少内存? - Daniel Lemire 的博客

主要观点:在 C 语言中用 malloc 函数在堆上分配内存,其他语言可能也调用 malloc,需理解其工作原理,相同概念适用于其他内存分配器;理论上可分配 1 字节内存,实际在现代系统中分配的是虚拟内存,不同系统对物理内存分配的态度不同,且有固定开销,通常分配的是 16 到 24 字节的大块可用内存,可通过 realloc 扩展内存,应避免在堆上分配过小内存块,不用刻意将分配大小优化到几字节。
关键信息:C 用 malloc 分配堆内存,其他语言可能调用它;现代系统分配虚拟内存;不同系统对物理内存分配态度不同;有固定开销,指针需跟踪;通常分配 16 - 24 字节;可通过 realloc 扩展;避免分配过小内存。
重要细节:如在 C 中char * buffer = (char*) malloc(1);分配 1 字节内存;Linux 可用malloc_usable_size,FreeBSD 和 macOS 可用malloc_size查看实际分配内存;不同系统实际分配内存大小不同,如 macOS 为 16 字节,x64 Linux 为 24 字节;平均多分配 8 字节;避免分配过小内存及优化分配大小到几字节,可利用 realloc 扩展内存区域。

阅读 15
0 条评论