【问题标题】:What is the fastest way to create Out of Memory condition in C?在 C 中创建内存不足条件的最快方法是什么?
【发布时间】:2014-03-24 18:51:16
【问题描述】:

我正在为我正在开发的库编写单元测试。无法模拟库实现。单元测试是在程序内存不足时返回一个特殊值。

我想出了这个幼稚的解决方案:

// Fillup memory
int *p = NULL
do {
    p = malloc(sizeof(int));
    // store p somewhere to release it later
} while(p);
// Got out of memory :)

有没有比这个解决方案更快地填满内存的方法不增加使用 malloc 分配的内存块大小?

PS:禁止使用第三方内存分配器:)

【问题讨论】:

    标签: unit-testing out-of-memory c99


    【解决方案1】:

    显然 - 但取决于 C++ 实现 - 您可以在多个线程中执行此操作。除此之外 - 没有。

    【讨论】:

    • 问题是关于 C 而不是 C++ :)
    • 我不确定创建超过 1 个线程对此有何帮助?我非常有信心malloc 将请求排队:stackoverflow.com/questions/4859263/…
    • 我不确定 - 这就是为什么我说它取决于实现。有些编译器具有非常无锁的实现,可以从不同的池中分配不同的 htreads 内存。也就是说,这是唯一可行的方法,因为你已经有了一个超级紧密的循环。什么都没有了。
    • 抱歉,我错过了“依赖于实现”的部分。
    【解决方案2】:

    尝试分配更大的内存块而不是 sizeof(int)。 例如1KB 并且当分配失败时继续减小循环中的大小参数。 执行此操作,直到足够小的大小分配失败 - 可能是 1 B。

    【讨论】:

    • 我认为,它应该让我在日志 N 时间内创建一个内存不足的条件。
    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 2021-08-07
    • 2016-10-25
    • 2013-10-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多