clang++ и простое статическое распределение в программе: сбой с EXC_BAD_ACCESS

Я записал эту очень простую программу на C++, которую я скомпилировал с помощью clang++, используя следующую команду, и она вылетает:

clang++ -O3  test.cpp  -o test -g

источник:

int main(int argc, char **argv)
{
    class TestVec3
    {
            public:
            TestVec3()  { x = y = z = 0; }
            float x, y, z;
    };

    TestVec3 colorBuffer[1000 * 1000];

    return 0;
}

когда я использую llbb, я получаю:

* thread #1: tid = 0x2529bd, 0x0000000100000f40 perspprojmat`main [inlined] TestVec3 at ridiculous.cpp:8, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0x7fff5f08e088)
frame #0: 0x0000000100000f40 perspprojmat`main [inlined] TestVec3 at ...
   5        class TestVec3
   6        {
   7            public:
-> 8            TestVec3()  { x = y = z = 0; }
   9            float x, y, z;
  10        };
  11    

Я давно не программировал, но это звучит просто смешно? Чего мне не хватает, это очевидно. Если я делаю динамическое размещение, это работает? (с использованием нового). Спасибо за вашу помощь.


person user18490    schedule 16.01.2015    source источник
comment
Вы выделяете почти 12 МБ (при условии, что float составляет четыре байта) в стеке с этим массивом, это намного больше, чем стандартный стек практически в любой системе (который обычно находится на территории с однозначным числом),   -  person Some programmer dude    schedule 17.01.2015
comment
Охладите этот интересный ответ, и я готов его принять. Как я могу узнать предел, который я могу выделить в стеке таким образом?   -  person user18490    schedule 17.01.2015
comment
Это зависит от случая, но когда что-то начинает занимать несколько десятков килобайт, тогда стоит задуматься об этом. Да, это немного, стек ограничен и является общим для всех вызываемых функций. Если вы хотите выделить большие объемы данных, используйте кучу   -  person Some programmer dude    schedule 17.01.2015
comment
Имеет смысл, я действительно ценю этот ответ. Пожалуйста, сделайте это правильным ответом, и я приму его.   -  person user18490    schedule 17.01.2015
comment
Можно также запросить с помощью: ulimit -s   -  person Brett Hale    schedule 17.01.2015
comment
На эту же тему уже есть сотни ответов и вопросов. например или другой здесь или здесь и т. д.   -  person WhozCraig    schedule 17.01.2015
comment
Я знаю, я просто не знаю, как я мог обнаружить это, проведя исследование, не думая, что это проблема с выделением памяти в стеке. Хотя я искал какое-то время.   -  person user18490    schedule 17.01.2015