編譯器:minGW
操作系統:win10 64位
在項目中使用QFile::readAll()讀取文件時,有些文件會直接導致程序崩潰。
通過調試qt源碼,發現在分配內存的時候拋出異常bad_alloc,錯誤的內存分配
查資料瞭解到32位程序可申請的最大堆內存不會超過2G,受操作系統等各方面因素影響,申請到的內存往往會更小
以下代碼可獲取到可申請的最大內存。每次的結果略微會有差異。經測試,編譯64位程序不會受到影響
int n = 1;
int size_ = 1024*1024;
while(true)
{
void* size = malloc(size_*n);
if(size == NULL)
{
break;
}
else
{
n++;
}
std::cout << n << "MB" << std::endl;
free(size);
}