powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись в стек или в кучу - что быстрее?
27 сообщений из 27, показаны все 2 страниц
Запись в стек или в кучу - что быстрее?
    #38583301
vilerenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно, что выделить память в стеке не стоит ничего, а в куче - затратно.
Более того, при записи в кучу менеджер памяти ОС постоянно на нервах
- выделенная память ещё не факт, что доступна физически, со стековой памяти
менеджеру памяти работать проще (про наличие разницы между разными ОС - в курсе).

А если предположить, что мы выделили память на куче,
а потом в цикле осуществили запись во все её ячейки,
то есть заставили все страницы присутствовать в ОЗУ.
В этом случае как отличается цена записи в стек и в кучу?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
void test()
{
    char buff_s[ 1024*1024 ]; // stack buffer

    char *buff_h = new char[ 1024*1024 ]; // heap buffer
    memset( buff_h, 0, 1024*1024);        // VIRT -> RES


   // Which one is cheaper?
   buff_s[ 555 ] = 5;    // 1
   buff_h[ 555 ] = 5;    // 2
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583302
vilerenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, ну естественно "и почему" тоже следовало бы добавить к вопросу.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583318
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenkoестественно "и почему" тоже следовало бы добавить к вопросу.
И к ответу тоже: почему, собственно, ты думаешь, что для ОСи адресное пространство,
занимаемое стэком, как-то отличается от занимаемого кучей?.. Менеджер памяти пометил
блок/страницу как занятую и ему совершенно пофиг кто, как и зачем к ней обращается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583319
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу предупрежу: могу ошибаться в своих домыслах. Исходники ОС не изучал.

1. Менеджер памяти напрягается только когда идет обращение по адресу под которым нет реальной памяти.
2. Менеджеру памяти без разницы под что выделена память. В обоих случаях если реальной памяти не хватает - она пойдет в своп.
3. Вероятность похода в своп стека ниже, т.к. он используется интенсивнее. Также выше вероятность что память из стека используется повторно, т.е. уже выделена реальная память.

Вывод: если реальной памяти полно - одинаково, если не хватает - стек предпочтительнее.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583329
vilerenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovvilerenkoестественно "и почему" тоже следовало бы добавить к вопросу.
И к ответу тоже: почему, собственно, ты думаешь, что для ОСи адресное пространство,
занимаемое стэком, как-то отличается от занимаемого кучей?.. Менеджер памяти пометил
блок/страницу как занятую и ему совершенно пофиг кто, как и зачем к ней обращается.

Мне кажется, на уровне менеджера памяти стоит тупая проверка: если это стек, используется отдельный простой алгоритм работы с ним. Я думаю, что стеку делается такая честь потому, что обычно он меньше, обычно самая используемая часть - по этим двум причинам можно вообще забить на выгрузку его на диск и как-нибудь упростить алгоритм трансляции страниц из виртуальных адресов в физические...
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583340
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenko,

Никто отдельно стек не обрабатывает.
За ненадобностью.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583343
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenkoМне кажется, на уровне менеджера памяти стоит тупая проверка: если это стек, используется отдельный простой алгоритм работы с ним.
У каждого потока свой стек, размер которого задается при запуске и причем размер с запасом, т.е. далеко не 100% запрошенного потребуется. Зачем менеджеру памяти под стек держать реальную память которая не будет никогда задействована?
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583397
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenkoМне кажется, на уровне менеджера памяти стоит тупая проверка: если это
стек, используется отдельный простой алгоритм работы с ним.
Ага, остаётся только нафантазировать какой телепатией он должен обладать, чтобы
определить, что вот эти 4 кб адресного пространства - стэк.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583414
vilerenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, я конечно гонзалес без чтения исходников ОС... Это была тупая, но гордая и смелая гипотеза!
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583415
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenkoя конечно гонзалес без чтения исходников ОС...
Да при чём тут исходники ОС?.. Достаточно элементарного знания о процессоре, его регистрах
(хотя бы одном SP) и отношениях с ОЗУ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583419
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Достаточно элементарного знания о процессоре Явная глупость
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583468
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenkoЯсно, что выделить память в стеке не стоит ничего, а в куче - затратно.

Не всегда всё так просто.
По крайней мере не всегда выделять в куче так уж затратно.

vilerenkoБолее того, при записи в кучу менеджер памяти ОС постоянно на нервах
- выделенная память ещё не факт, что доступна физически, со стековой памяти
менеджеру памяти работать проще (про наличие разницы между разными ОС - в курсе).

А чем стековая память так уж отличается в этом смысле от кучи ? Тут как раз они одинаковы.

vilerenkoА если предположить, что мы выделили память на куче,
а потом в цикле осуществили запись во все её ячейки,
то есть заставили все страницы присутствовать в ОЗУ.
В этом случае как отличается цена записи в стек и в кучу?


Неизвестно...

Все учёные С++ мужи до сих пор ломают головы над этой проблемой, но ничего не могут сказать,
Но у них есть надежда, что всё-таки запись в память имеет одинаковую стоимость, если конечно
не учитывать такие вещи, как NUMA.
Ведь физически это всё же одна и та же память.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583469
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovvilerenkoМне кажется, на уровне менеджера памяти стоит тупая проверка: если это
стек, используется отдельный простой алгоритм работы с ним.
Ага, остаётся только нафантазировать какой телепатией он должен обладать, чтобы
определить, что вот эти 4 кб адресного пространства - стэк.


Ну, тут не надо сильно напрягаться.
Обращение идёт через stack pointer. Это если Intel, естественно.
Кажется и сегментные регистры/регистры дескрипторов были под стек отдельные.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583493
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenkoЯсно, что выделить память в стеке не стоит ничего, а в куче - затратно.
В общем случае, это не верно.
Но чаще всего это верно.

vilerenkoА если предположить, что мы выделили память на куче,
а потом в цикле осуществили запись во все её ячейки,
то есть заставили все страницы присутствовать в ОЗУ.Ну так уж прямо и "заставили". Если физической памяти не хватает, то как только ты начинаешь работать с новой страницей, одна из старых уходит в свап. А принадлежит эта страница куче или стеку совершенно не важно.

vilerenkoВ этом случае как отличается цена записи в стек и в кучу?Никак не отличается. Менеджеру памяти совершенно до лампочки что у тебя в конкретной странице находится. Куча, стек, код или константы. С точки зрения МП страница принадлежит процессу или не принадлежит, к ней обращались давно или недавно. И все.

MasterZivDimitry Sibiryakovпропущено...

Ага, остаётся только нафантазировать какой телепатией он должен обладать, чтобы
определить, что вот эти 4 кб адресного пространства - стэк.


Ну, тут не надо сильно напрягаться.
Обращение идёт через stack pointer. Это если Intel, естественно.
Кажется и сегментные регистры/регистры дескрипторов были под стек отдельные.Почему были? Они и сейчас есть.
Стек всегда доступен по SS:ESP и SS:EBP.
Другое дело что на стоимость доступа к памяти это никак не влияет.
А на других семействах (да и на 64-х битных потомках x86) уже нету такой четкой типизации регистров. Там уже действительно менеджер памяти должен обладать телепатией чтобы узнать какая страница содержит стек а какая кучу.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583494
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТам уже действительно менеджер памяти должен обладать телепатией чтобы узнать какая страница содержит стек а какая кучу.
какой телепатией? о чём вы?
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583496
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилWhite OwlТам уже действительно менеджер памяти должен обладать телепатией чтобы узнать какая страница содержит стек а какая кучу.
какой телепатией? о чём вы?шоб знать что "здесь" у нас стек и поэтому данную страницу ни в коем случае нельзя отправлять в своп.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583500
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlшоб знать что "здесь" у нас стек и поэтому данную страницу ни в коем случае нельзя отправлять в своп.
и? менеджеру память неизвестно распределение адресного пространства под стэки и кучи?
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583751
vilerenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилWhite Owlшоб знать что "здесь" у нас стек и поэтому данную страницу ни в коем случае нельзя отправлять в своп.
и? менеджеру память неизвестно распределение адресного пространства под стэки и кучи?
Неизвестно, ведь стек - понятие уровня приложения, выстраиваемое компилятором и загрузчиком. Можно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет. Менеджеру памяти различать стек и кучу надобности нет, видимо.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583819
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenkoстек - понятие уровня приложения, выстраиваемое компилятором и
загрузчиком. Можно запилить такой загрузчег и такую парадигму программирования, где стека
существовать не будет.
Да проще всё: присвоить SP любое значение и по этому адресу будет новый стэк, о котором ни
компилятор ни загрузчик не знают ничего.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583877
vilerenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovvilerenkoстек - понятие уровня приложения, выстраиваемое компилятором и
загрузчиком. Можно запилить такой загрузчег и такую парадигму программирования, где стека
существовать не будет.
Да проще всё: присвоить SP любое значение и по этому адресу будет новый стэк, о котором ни
компилятор ни загрузчик не знают ничего.

+1
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38583937
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenkoМожно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет
Можно для начала свой рантайм запилиь, ОС запилить, да и процессор свой не помешает.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38584452
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vilerenkoведь стек - понятие уровня приложения, выстраиваемое компилятором и загрузчиком.Это не совсем верно.
Некоторые процессоры "знают" что такое стек и имеют специальные средства (спец-регистры и команды) для работы со стеком.
Другие процессоры ничего не знают о стеках и на них компилятор эмулирует стек через обычные косвенные обращения к памяти.
Пример первых - семейство Intel начиная с i4040 и вплоть до Pentium IV. Пример вторых - практически все процессоры от Motorolla.
Нынешнее семейство Intel Core и его кузены от AMD это "пограничное состояние" У них есть команды на работу со стеком, и есть специальные регистры управляемые этими командами, но эти регистры так же могут быть использованы и для всех остальных команд и являются регистрами общего назначения.

vilerenko Можно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет. Менеджеру памяти различать стек и кучу надобности нет, видимо.И "Да" и "Нет". Да - если мы будем говорить о каких-то других языках. Нет - если ты используешь С или С++ то без стека обойтись не сможешь. Некоторые особенности этих языков подразумевают использование стека на уровне машинного языка.

Посмотри в словаре слово "загрузчик".
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38584459
vilerenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlvilerenkoведь стек - понятие уровня приложения, выстраиваемое компилятором и загрузчиком.Это не совсем верно.
Некоторые процессоры "знают" что такое стек и имеют специальные средства (спец-регистры и команды) для работы со стеком.
Другие процессоры ничего не знают о стеках и на них компилятор эмулирует стек через обычные косвенные обращения к памяти.
Пример первых - семейство Intel начиная с i4040 и вплоть до Pentium IV. Пример вторых - практически все процессоры от Motorolla.
Нынешнее семейство Intel Core и его кузены от AMD это "пограничное состояние" У них есть команды на работу со стеком, и есть специальные регистры управляемые этими командами, но эти регистры так же могут быть использованы и для всех остальных команд и являются регистрами общего назначения.

vilerenko Можно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет. Менеджеру памяти различать стек и кучу надобности нет, видимо.И "Да" и "Нет". Да - если мы будем говорить о каких-то других языках. Нет - если ты используешь С или С++ то без стека обойтись не сможешь. Некоторые особенности этих языков подразумевают использование стека на уровне машинного языка.

Посмотри в словаре слово "загрузчик".
Это всё понятно )
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38584482
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНет - если ты используешь С или С++ то без стека обойтись не сможешь.
в System/360 и потомках аппаратного стека нет, есть соглашения об использовании регистров
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38584514
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилв System/360 и потомках аппаратного стека нет, есть соглашения об
использовании регистров
Ну если так считать, то вообще нигде аппаратного стэка нет, просто команды CALL-RET
используют один договорной регистр как указатель.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38584517
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovИзопропилв System/360 и потомках аппаратного стека нет, есть соглашения об
использовании регистров
Ну если так считать, то вообще нигде аппаратного стэка нет, просто команды CALL-RET
используют один договорной регистр как указатель.
Есть аппаратный стек. Есть. На наших любимых x86 стек как раз аппаратный. Там нельзя было использовать регистр SP ни для чего другого кроме как для push, pop, call и ret.
...
Рейтинг: 0 / 0
Запись в стек или в кучу - что быстрее?
    #38584526
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlТам нельзя было использовать регистр SP ни для чего другого кроме как для
push, pop, call и ret.
В него можно было сделать mov ЕМНИП, т.е. для хранения числа он подходил. Интеловские
парни просто решили не париться с микрокодом и сделали все команды так, чтобы они работали
исключительно с фиксированными регистрами. А может им просто не хватило восьми бит опкода
чтобы засунуть туда номер регистра и тип адресации как это сделали в DEC-е.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись в стек или в кучу - что быстрее?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]