有没有办法找出在c中使用malloc时可用的最大字节数是多少?

时间:2009-03-27 16:30:59

标签: c memory memory-management malloc

或者你只需​​要这样做并检查errno和/或指针,看看你是否成功了?

4 个答案:

答案 0 :(得分: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语句之间并且自己进行分配。这可以减少系统中的总体内存,从而改变available_memory的回报。

更糟糕的是系统中可用的内存量并不能确定可以使用malloc分配多少内存。对malloc(以及任何其他内存分配操作)重要的是可用的连续内存量。

答案 1 :(得分:6)

尝试不一定会有所帮助,因为某些操作系统(如Linux)使用乐观的内存分配策略 - 即使从malloc()获得非NULL结果,也不意味着您有所请求的内存释放为您服务。

更多here

似乎无法做到。

答案 2 :(得分:1)

在C中没有办法做到这一点。任何解决方案都是特定于操作系统的,我不知道它是否足以实现。

答案 3 :(得分:1)

如果您在程序开始时就知道需要多少内存并且程序在运行时一定不会失败,只需将开头所需的所有内存分配为一个大块,然后自行管理。 / p>