gpt4 book ai didi

c - 在 C 中编写 malloc 模型

转载 作者:太空狗 更新时间:2023-10-29 16:00:04 24 4
gpt4 key购买 nike

我正在阅读模型 malloc (allocateMemory) 的一些代码。我已经发布了一部分代码,但我无法理解 size = (size_in_bytes + sizeof(int) - 1)/sizeof(int); 的用途。 (贴出代码的最后一行)

void initializeHeap(void) {
/* each chunk requires two signatures, one at the top and one
* at the bottom, so the available space inside a chunk is
* the number of elements in the chunk minus 2
*/
unsigned available_size = HEAP_SIZE - 2;

if (initialized) { return; }


/* write signatures at top and bottom of chunk */
memory_pool[0] = available_size;
memory_pool[HEAP_SIZE - 1] = available_size;
initialized = true;
}

void* allocateMemory(unsigned size_in_bytes) {
int size;
unsigned chunk;
int chunk_size;

initializeHeap();

size = (size_in_bytes + sizeof(int) - 1) / sizeof(int);

最佳答案

它将大小向上舍入为 sizeof(int) 的倍数。这通常是为了对齐目的而完成的,因为在某些机器(例如 SPARC)上,您无法访问在奇数地址上对齐的 32 位宽值(典型症状是 SIGBUS)。即使在支持未对齐访问的处理器上,如 x86 和 PPC,它通常也比对齐访问慢。它还有助于防止缓存拆分,其中一半数据在一个缓存行中,一半在另一个缓存行中 - 这会使对值的访问速度减慢 2 倍,这是非常讨厌的。

Malloc 必须假定最大可能的有用对齐,因为它不知道它正在分配的东西的大小。通常为 4、8 或 16 个字节,具体取决于机器。

关于c - 在 C 中编写 malloc 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1675931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com