还是您只需要检查 errno 和/或指针以查看您是否成功?
Paul Wicks
问问题
386 次
4 回答
14
您是在问是否可以在调用 malloc 之前找出有多少字节可供您使用?
如果是这样,答案是否定的。即使你可以,答案对你来说也可能不是很有价值。原因是你永远不知道有多少内存可用,你只能知道有多少内存可用。这是一个非常重要的区别,因为它会影响您正确使用 API 的方式。
例如,假设有一个名为 available_memory 的函数。这段代码看起来是正确的,但被严重破坏了
size_t size = GetSizeToAllocate();
if ( size < available_memory() ) {
// No need to check the answer because there is enough memory
SomeType* p = malloc(size);
}
原因是其他线程可能会进入 if 语句和 malloc 语句之间并进行自己的分配。这可能会减少系统中的整体内存,从而改变可用内存的回报。
更糟糕的是系统中的可用内存量并不能决定使用malloc可以分配多少内存。对于 malloc(以及任何其他内存分配操作)来说,重要的是有多少连续内存可用。
于 2009-03-27T16:35:08.577 回答
6
尝试不一定有帮助,因为某些操作系统(如 Linux)使用乐观的内存分配策略 - 即使您从中获得非 NULL 结果malloc()
也不意味着您有请求的内存供您使用。
更多在这里
似乎没有办法做到这一点。
于 2009-03-27T16:38:26.417 回答
1
在 C 中没有办法做到这一点。任何解决方案都是特定于操作系统的,我不知道它是否足够有用以实现。
于 2009-03-27T16:33:27.817 回答
1
如果您在程序开始时就知道需要多少内存,并且程序在运行时不能失败,通常只需将开始时所需的所有内存分配为一个大块,然后自己管理它。
于 2009-03-27T16:51:31.627 回答