忽略多线程问题,以下内容保证有效:
int can_alloc(size_t i)
{
void *p = malloc(i);
if(p == NULL) return 0;
free(p);
return 1;
}
// later
if(can_alloc(10))
{
char *c = malloc(10); // no need to verify, we already did?
memcpy(c, "something", 10);
}
这主要是出于好奇。我没有计划将其用于任何用途,但我相信应该保证它可以工作,并且确定它会提供有用的信息。
最佳答案
没有。即使没有多线程,malloc
调用也会从操作系统获取(内存)资源。通常(Windows、Linux、Mac 等)操作系统可以在程序执行时随时执行影响可用资源的操作。这意味着在您的检查和实际分配之间,内存可能会变得“不可用”。
如果您对操作系统有异常完全的控制,那么就有可能使其变得健壮 - 但这将非常棘手。
关于c - 跳跃前先看一下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291383/