【发布时间】:2021-12-10 08:39:50
【问题描述】:
我有一个大文件要阅读。当我尝试使用 10mb 的字符缓冲区时,我遇到了堆栈溢出。
const size_t buffsize = 1024 * 1024 * 10; // 10mb
char buff[buffsize];
Exception thrown at 0x00007FF7FF42D3F7 in ConsoleApplicationTest.exe: 0xC00000FD: Stack overflow (parameters: 0x0000000000000001, 0x000000E352D03000).
Unhandled exception at 0x00007FF7FF42D3F7 in ConsoleApplicationTest.exe: 0xC00000FD: Stack overflow (parameters: 0x0000000000000001, 0x000000E352D03000).
在 C# 上,我曾经使用超过 100mb 的缓冲区。所以我也在 c++ 上尝试过,但没有成功。有件事我不知道。请告诉我。谢谢。
【问题讨论】:
-
C# 不是 C++。使用
std::vector<char> buff(buffsize);在编写 C++ 程序时不要使用 C# 作为模型。 -
如果您需要一个大数组,请在堆上而不是在堆栈上创建它(例如,使用
std::vector)。 -
简而言之:是的,有限制;它是什么取决于您的平台和操作系统。在常见的桌面和服务器平台上,它通常在 1-10 MB 范围内,所以 10 MB 肯定太大了。
-
还要注意类型:
1024 * 1024 * 1024 * 10不是 10GB。
标签: c++ buffer-overflow