Chr*_*utz 2 c malloc memory-management
忽略多线程问题,以下保证可以正常工作:
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);
}
Run Code Online (Sandbox Code Playgroud)
这主要是出于好奇.我没有计划将此用于任何事情,但我相信它应该保证能够正常工作,并且确实可以提供信息.
不.即使没有多线程,malloc呼叫也是从OS获取(内存)资源.通常(Windows,Linux,Mac等)操作系统可以在程序执行期间随时执行影响可用资源的操作.这意味着在您的支票和实际分配之间,内存可能会变得"不可用".
如果您对操作系统有异常完全的控制权,那么可能会使其变得强大 - 但这将非常棘手.