[gcc] выделение памяти для глобальных/локальных переменных
есть ограничения на стек.
компилятор - gcc/g++ 4.2.0В gcc по умолчанию стоит -O0, а в icc — -O2.
с icc 9.1 эффект не наблюдается
Попробуй gcc с -O2 и icc с -O0
А вообще это не очень хорошая идея размещать большие массивы в стеке. В твоем случае как workaround поможет
ulimit -s unlimited
Попробуй gcc с -O2 и icc с -O0ситуация изменилась на прямо противоположную
если можно - пару слов о том что это все значит
почему с _выключенной_ оптимизацией программа рушится? ведь с точки зрения банальной эрудиции так быть не должно ; )
> твоем случае как workaround поможет ulimit -s unlimited
мне не принципиально статический это будет массив или динамический
просто удивительным показалось
2 , : про стек я понял. спасибо.
Если стек ограничен 8 мегабайтами, то создать в нем массив больше не получится, этого не позволит система, и бросит segfault.
Включение оптимизации на конретно этом коде позволит компилятору вообще нигде не выделять память, и сразу вернуть ноль.
Если без разницы, то делай динамическим/глобальным.
В linux может быть ограничение на стек (смотри вывод команды ulimit -a)действительно
stack size (kbytes, -s) 8192
Включение оптимизации на конретно этом коде позволит компилятору вообще нигде не выделять память, и сразу вернуть ноль.теперь понятно. спасибо еще раз. а то я как бендер блин "это ставит под сомнение всю мою концепцию реальности" )
Потому что это --- GCC 4.
Различаются даже -O3 и -O2, сильно. А ты сравниваешь...
---
"Мы диалектику учили не по Гегелю.
Бряцанием боёв она врывалась в стих..."
Оставить комментарий
spensnp
вываливается с ошибкой сегментирования
работает
работает
работает
компилятор - gcc/g++ 4.2.0
с icc 9.1 эффект не наблюдается
это с компилятором проблемы или есть какие-то ограничения на память выделяемую для локальных переменных?