1

还是您只需要检查 errno 和/或指针以查看您是否成功?

4

4 回答 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 回答