Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Массив в стеке и куче


Автор: Coocky 30.9.2005, 17:41
Код

const long size = 39999996;
    long *pa = new long [size];

Вот так у меня работает...
Код

const long size = 39999996;
      long pa[size];

А вот так прога вылетает..
только 99999 катит..
А как у вас?

Автор: Mad 30.9.2005, 18:01
Цитата(Coocky @ 30.9.2005, 16:41)
А вот так прога вылетает..
только 99999 катит..

А ты посмотри в опциях компилятора сколько ты под стек выделяеш smile
У меня до 2М работало нормально, правдо при явном определении т.е

char pa[2097152];

Автор: Dreamer_0x01 30.9.2005, 18:39
у меня тоже не работает...

Автор: Mad 30.9.2005, 18:48
Цитата(MSDN)

/STACK:reserve[,commit]
The /STACK option sets the size of the stack in bytes. This option is only for use when building an .exe file.

This option specifies the total stack allocation in virtual memory. The default stack size is 1 MB. The linker rounds up the specified value to the nearest 4 bytes.

commit is subject to interpretation by the operating system. In Windows NT and Windows 2000 it specifies the amount of physical memory to allocate at a time. Committed virtual memory causes space to be reserved in the paging file. A higher commit value saves time when the application needs more stack space, but increases the memory requirements and possibly the startup time.

Specify the reserve and commit values in decimal or C-language notation.

Another way to set the size of the stack is with the STACKSIZE statement in a module-definition (.def) file. STACKSIZE overrides the Stack Allocations (/STACK) option if both are specified. You can change the stack after the .exe file is built by using the EDITBIN tool.

To set this linker option in the Visual Studio development environment

Open the project's Property Pages dialog box. For details, see Setting Visual C++ Project Properties.
Click the Linker folder.
Click the System property page.
Modify one of the following properties:
Stack Commit Size
Stack Reserve Size
To set this linker option programmatically

See StackCommitSize and StackReserveSize properties.

See Also
Setting Linker Options | Linker Options



Автор: Coocky 30.9.2005, 21:11
Хех!
Не знал, что такое есть в стеке..
Хорошя вещь, спасибо.
А это на ВЕСЬ стек установка?
Т.е если у меня будет обьектов в функции более чем на 2 Мгб я тоже улечу?
Хотя Рихтер пишет, что стек работает медленее.
Но я предпочитаю стек, из-за забывания о delete smile

Автор: maxim1000 30.9.2005, 21:47
Цитата
Хотя Рихтер пишет, что стек работает медленее

Рихтера не читал, интересно было бы посмотреть на его аргументы
как мне кажется, стек работает значительно быстрее:
1. выделение памяти new - долгое дело, выделение памяти в стеке - одна операция
2. т.к. вызов/возврат функций происходит очень часто, думаю, не будет большой натяжкой сказать, что стек находится в кеше процессора всегда (имеется в виду время исполнения конкретного потока)

куча, конечно же, значительно более гибкая, но чтобы быстрее... сильно сомневаюсь...

Автор: Mad 30.9.2005, 21:54
Цитата(maxim1000 @ 30.9.2005, 20:47)
Рихтера не читал

Тоже не читал smile
Цитата(maxim1000 @ 30.9.2005, 20:47)
стек работает значительно быстрее

тут не все так однозначно, очень много вариантов
в одних стек будет работать быстрей, в других куча, а в третих вообще все через globbal переменные

никогда нельзя утверждать, что один стиль программирования (а тут уже речь о стилях) быстрей, оптимизированней или лучше другово, все зависит от конкретной задачи, так что самое лучшее их комбинировать smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)