内存不足时输出到 stdout 或 stderr

问题描述 投票:0回答:1

内存不足时如何输出内容?

我有一组自定义的 malloc[、realloc 和 calloc] 和 free 函数。 目前该项目仅使用它们作为普通版本函数的包装器。这些包装函数终止程序,并应给出一个输出来指示错误。

目前输出错误消息的函数如下所示:

#ifdef __linux__
void memory_error() {
    if (errno == ENOMEM)
        printf("%s\n", "Out of memory or memory is limited. Fatal error. The program needs to terminate.");
    else
        printf("%s\n", "Memory allocation failed. Fatal error. The program needs to terminate.");
}
#else
void memory_error() {
    printf("%s\n", "Memory allocation failed, likely due to being out of "
                   "memory or memory being limited for this program. "
                   "Fatal error. The program needs to terminate.");
}
#endif

问题是

printf()
有时会分配内存,如果我内存不足,就会失败。
fwrite()
分配内存吗?如果是这样,是否有一个可移植(因此无需写入系统调用)选项可以输出某些内容而无需分配更多内存?

到目前为止,作为 UNIX 系统的可行解决方案,我可以这样做:

#ifdef __unix__
#define write_str_no_alloc(str) write(STDERR_FILENO, str, sizeof(str))
#else
#define write_str_no_alloc(str) ???
#endif

我缺少 Windows 的解决方案。我更喜欢两者的通用解决方案,但这对我有用。

c memory-management out-of-memory
1个回答
0
投票

Windows 有一个

_write
函数,它是 POSIX 兼容层的一部分。 所以你可以这样做:

#ifdef _MSC_VER
#include <io.h>
#define write_str_no_alloc(str) _write(STDERR_FILENO, str, sizeof(str))
#else
#define write_str_no_alloc(str) write(STDERR_FILENO, str, sizeof(str))
#endif
© www.soinside.com 2019 - 2024. All rights reserved.