C++:大堆栈分配的 gcc 编译器警告

C++ : gcc compiler warning for large stack allocation

考虑:

void largestackallocation() {
    double a[10000000];
}

int main() {
    return 0;
}

在使用 MSVC(Cl.exe 和 MSBuild.exe)编译时,发出警告 C6262,建议将分配移动到堆而不是堆栈。编译处于发布模式,具有以下选项:

/permissive- /ifcOutput "x64\Release\" /GS /GL /W3 /Gy /Zc:wchar_t /I"E:\local\boost_1_72_0" /Zi /Gm- /O2 /sdl /Fd"x64\Release\vc142.pdb" /Zc:inline /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /Oi /MD /FC /Fa"x64\Release\" /EHsc /nologo /Fo"x64\Release\" /FA /Fp"x64\Release\windows.pch" /diagnostics:column

在 gcc 上,发布模式构建甚至可以将警告转换为错误:

g++    -c -O2 -Werror -MMD -MP -MF "build/Release/GNU-Linux/_ext/511e4115/largestackallocation.o.d" -o build/Release/GNU-Linux/_ext/511e4115/largestackallocation.o ../src/largestackallocation.cpp
mkdir -p dist/Release/GNU-Linux

没有warning/errors发出。 option/setting 是什么让 gcc/g++ 对潜在的大堆栈分配发出警告?

-Wlarger-than="max-bytes" 可能就是您要查找的内容。每当定义的对象大小超过“最大字节数”时,它都会向您发出警告。