内存不足时如何输出一些内容?
我有一组自定义的 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 的解决方案。我更希望有一个适用于两者的通用解决方案,但这对我来说是可行的。