c - 跳跃前先看一下

标签 c memory-management malloc

忽略多线程问题,以下内容保证有效:

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/

相关文章:

c++ - 如何保证进程调用malloc()时立即分配物理内存?

c++ - 从工厂返回静态或动态分配的对象?

c - void** 作为函数中的参数有什么用?

c - malloc 位字段值到 c 中的数组

C 编译器 - 列出 __builtin_ 类型

c - 使用无循环递归的乘法表

java.lang.OutOfMemoryError Spark DAG 具有更多阶段

c - 为结构指针执行 malloc 时出现段错误

c - 需要为 2D 元组数组和未知大小的 2D 指针数组分配内存?

c - C中给char ***分配内存