1

我在一次采访中被问到这个问题,malloc 可以分配的最小大小是多少,malloc 可以分配的最大大小是多少。

我回答了 min size if 1 byte,当我告诉他回答时假设这是正确的,现在告诉我可以malloc分配的最大内存块大小是多少(当你尝试这样做malloc时会失败),认为你有4GBRAM 和你给我写一个代码要为您编写的简单程序找到堆段的大小,或者给我写一个代码来查找堆栈段的大小。

任何人都可以帮助我解决这个问题。

它可以分配的最小大小是1 byte?我回答认为 char 需要最少的内存。

4

2 回答 2

0

malloc可以真正分配的最小大小是 1 字节。根据 C 标准 (7.22.3),“如果请求的空间大小为零,则行为是实现定义的:要么返回空指针,要么行为就像大小是某个非零值,除了返回的指针不应用于访问对象。”

另一方面,malloc几乎肯定会分配比 1 更多的字节,即使您使用大小 1 调用它。它需要额外的字节来存储额外的信息,例如分配的内存块的大小,这将是释放所需要的。此外,还有内存对齐问题。

如果你被要求编写一个程序来计算在malloc给定的 4GB 内存的机器上和给定的时间可以分配的最大大小,我认为你应该编写一个使用二进制搜索来找到确切最大值的程序。当然,每次调用时程序的答案可能不同。同样可以使用堆栈分配的可变大小数组来计算堆栈的最大允许大小。

于 2013-09-01T13:07:01.647 回答
0

是的,最小大小malloc(size_t)保证能够分配它(size_t) 1

请求0字节是否返回取决于实现NULL

C标准(WG14/N1256)7.20.3:

如果请求的空间大小为零,则行为是实现定义的:返回空指针,或者行为就像大小是某个非零值一样,除了返回的指针不应用于访问对象

于 2013-09-01T12:57:09.703 回答