Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
Ясно, что выделить память в стеке не стоит ничего, а в куче - затратно. Более того, при записи в кучу менеджер памяти ОС постоянно на нервах - выделенная память ещё не факт, что доступна физически, со стековой памяти менеджеру памяти работать проще (про наличие разницы между разными ОС - в курсе). А если предположить, что мы выделили память на куче, а потом в цикле осуществили запись во все её ячейки, то есть заставили все страницы присутствовать в ОЗУ. В этом случае как отличается цена записи в стек и в кучу? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:04 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
Да, ну естественно "и почему" тоже следовало бы добавить к вопросу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:05 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenkoестественно "и почему" тоже следовало бы добавить к вопросу. И к ответу тоже: почему, собственно, ты думаешь, что для ОСи адресное пространство, занимаемое стэком, как-то отличается от занимаемого кучей?.. Менеджер памяти пометил блок/страницу как занятую и ему совершенно пофиг кто, как и зачем к ней обращается. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:26 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
Сразу предупрежу: могу ошибаться в своих домыслах. Исходники ОС не изучал. 1. Менеджер памяти напрягается только когда идет обращение по адресу под которым нет реальной памяти. 2. Менеджеру памяти без разницы под что выделена память. В обоих случаях если реальной памяти не хватает - она пойдет в своп. 3. Вероятность похода в своп стека ниже, т.к. он используется интенсивнее. Также выше вероятность что память из стека используется повторно, т.е. уже выделена реальная память. Вывод: если реальной памяти полно - одинаково, если не хватает - стек предпочтительнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:26 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovvilerenkoестественно "и почему" тоже следовало бы добавить к вопросу. И к ответу тоже: почему, собственно, ты думаешь, что для ОСи адресное пространство, занимаемое стэком, как-то отличается от занимаемого кучей?.. Менеджер памяти пометил блок/страницу как занятую и ему совершенно пофиг кто, как и зачем к ней обращается. Мне кажется, на уровне менеджера памяти стоит тупая проверка: если это стек, используется отдельный простой алгоритм работы с ним. Я думаю, что стеку делается такая честь потому, что обычно он меньше, обычно самая используемая часть - по этим двум причинам можно вообще забить на выгрузку его на диск и как-нибудь упростить алгоритм трансляции страниц из виртуальных адресов в физические... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:38 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenko, Никто отдельно стек не обрабатывает. За ненадобностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:53 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenkoМне кажется, на уровне менеджера памяти стоит тупая проверка: если это стек, используется отдельный простой алгоритм работы с ним. У каждого потока свой стек, размер которого задается при запуске и причем размер с запасом, т.е. далеко не 100% запрошенного потребуется. Зачем менеджеру памяти под стек держать реальную память которая не будет никогда задействована? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 19:58 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenkoМне кажется, на уровне менеджера памяти стоит тупая проверка: если это стек, используется отдельный простой алгоритм работы с ним. Ага, остаётся только нафантазировать какой телепатией он должен обладать, чтобы определить, что вот эти 4 кб адресного пространства - стэк. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 21:36 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
Ладно, я конечно гонзалес без чтения исходников ОС... Это была тупая, но гордая и смелая гипотеза! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 22:21 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenkoя конечно гонзалес без чтения исходников ОС... Да при чём тут исходники ОС?.. Достаточно элементарного знания о процессоре, его регистрах (хотя бы одном SP) и отношениях с ОЗУ. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 22:27 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
автор Достаточно элементарного знания о процессоре Явная глупость ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2014, 22:44 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenkoЯсно, что выделить память в стеке не стоит ничего, а в куче - затратно. Не всегда всё так просто. По крайней мере не всегда выделять в куче так уж затратно. vilerenkoБолее того, при записи в кучу менеджер памяти ОС постоянно на нервах - выделенная память ещё не факт, что доступна физически, со стековой памяти менеджеру памяти работать проще (про наличие разницы между разными ОС - в курсе). А чем стековая память так уж отличается в этом смысле от кучи ? Тут как раз они одинаковы. vilerenkoА если предположить, что мы выделили память на куче, а потом в цикле осуществили запись во все её ячейки, то есть заставили все страницы присутствовать в ОЗУ. В этом случае как отличается цена записи в стек и в кучу? Неизвестно... Все учёные С++ мужи до сих пор ломают головы над этой проблемой, но ничего не могут сказать, Но у них есть надежда, что всё-таки запись в память имеет одинаковую стоимость, если конечно не учитывать такие вещи, как NUMA. Ведь физически это всё же одна и та же память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 01:28 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovvilerenkoМне кажется, на уровне менеджера памяти стоит тупая проверка: если это стек, используется отдельный простой алгоритм работы с ним. Ага, остаётся только нафантазировать какой телепатией он должен обладать, чтобы определить, что вот эти 4 кб адресного пространства - стэк. Ну, тут не надо сильно напрягаться. Обращение идёт через stack pointer. Это если Intel, естественно. Кажется и сегментные регистры/регистры дескрипторов были под стек отдельные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 01:32 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenkoЯсно, что выделить память в стеке не стоит ничего, а в куче - затратно. В общем случае, это не верно. Но чаще всего это верно. vilerenkoА если предположить, что мы выделили память на куче, а потом в цикле осуществили запись во все её ячейки, то есть заставили все страницы присутствовать в ОЗУ.Ну так уж прямо и "заставили". Если физической памяти не хватает, то как только ты начинаешь работать с новой страницей, одна из старых уходит в свап. А принадлежит эта страница куче или стеку совершенно не важно. vilerenkoВ этом случае как отличается цена записи в стек и в кучу?Никак не отличается. Менеджеру памяти совершенно до лампочки что у тебя в конкретной странице находится. Куча, стек, код или константы. С точки зрения МП страница принадлежит процессу или не принадлежит, к ней обращались давно или недавно. И все. MasterZivDimitry Sibiryakovпропущено... Ага, остаётся только нафантазировать какой телепатией он должен обладать, чтобы определить, что вот эти 4 кб адресного пространства - стэк. Ну, тут не надо сильно напрягаться. Обращение идёт через stack pointer. Это если Intel, естественно. Кажется и сегментные регистры/регистры дескрипторов были под стек отдельные.Почему были? Они и сейчас есть. Стек всегда доступен по SS:ESP и SS:EBP. Другое дело что на стоимость доступа к памяти это никак не влияет. А на других семействах (да и на 64-х битных потомках x86) уже нету такой четкой типизации регистров. Там уже действительно менеджер памяти должен обладать телепатией чтобы узнать какая страница содержит стек а какая кучу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 06:30 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
White OwlТам уже действительно менеджер памяти должен обладать телепатией чтобы узнать какая страница содержит стек а какая кучу. какой телепатией? о чём вы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 06:34 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
ИзопропилWhite OwlТам уже действительно менеджер памяти должен обладать телепатией чтобы узнать какая страница содержит стек а какая кучу. какой телепатией? о чём вы?шоб знать что "здесь" у нас стек и поэтому данную страницу ни в коем случае нельзя отправлять в своп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 06:37 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
White Owlшоб знать что "здесь" у нас стек и поэтому данную страницу ни в коем случае нельзя отправлять в своп. и? менеджеру память неизвестно распределение адресного пространства под стэки и кучи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 06:52 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
ИзопропилWhite Owlшоб знать что "здесь" у нас стек и поэтому данную страницу ни в коем случае нельзя отправлять в своп. и? менеджеру память неизвестно распределение адресного пространства под стэки и кучи? Неизвестно, ведь стек - понятие уровня приложения, выстраиваемое компилятором и загрузчиком. Можно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет. Менеджеру памяти различать стек и кучу надобности нет, видимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 11:38 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenkoстек - понятие уровня приложения, выстраиваемое компилятором и загрузчиком. Можно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет. Да проще всё: присвоить SP любое значение и по этому адресу будет новый стэк, о котором ни компилятор ни загрузчик не знают ничего. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 12:16 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovvilerenkoстек - понятие уровня приложения, выстраиваемое компилятором и загрузчиком. Можно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет. Да проще всё: присвоить SP любое значение и по этому адресу будет новый стэк, о котором ни компилятор ни загрузчик не знают ничего. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 12:48 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenkoМожно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет Можно для начала свой рантайм запилиь, ОС запилить, да и процессор свой не помешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 13:34 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
vilerenkoведь стек - понятие уровня приложения, выстраиваемое компилятором и загрузчиком.Это не совсем верно. Некоторые процессоры "знают" что такое стек и имеют специальные средства (спец-регистры и команды) для работы со стеком. Другие процессоры ничего не знают о стеках и на них компилятор эмулирует стек через обычные косвенные обращения к памяти. Пример первых - семейство Intel начиная с i4040 и вплоть до Pentium IV. Пример вторых - практически все процессоры от Motorolla. Нынешнее семейство Intel Core и его кузены от AMD это "пограничное состояние" У них есть команды на работу со стеком, и есть специальные регистры управляемые этими командами, но эти регистры так же могут быть использованы и для всех остальных команд и являются регистрами общего назначения. vilerenko Можно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет. Менеджеру памяти различать стек и кучу надобности нет, видимо.И "Да" и "Нет". Да - если мы будем говорить о каких-то других языках. Нет - если ты используешь С или С++ то без стека обойтись не сможешь. Некоторые особенности этих языков подразумевают использование стека на уровне машинного языка. Посмотри в словаре слово "загрузчик". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 19:26 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
White Owlvilerenkoведь стек - понятие уровня приложения, выстраиваемое компилятором и загрузчиком.Это не совсем верно. Некоторые процессоры "знают" что такое стек и имеют специальные средства (спец-регистры и команды) для работы со стеком. Другие процессоры ничего не знают о стеках и на них компилятор эмулирует стек через обычные косвенные обращения к памяти. Пример первых - семейство Intel начиная с i4040 и вплоть до Pentium IV. Пример вторых - практически все процессоры от Motorolla. Нынешнее семейство Intel Core и его кузены от AMD это "пограничное состояние" У них есть команды на работу со стеком, и есть специальные регистры управляемые этими командами, но эти регистры так же могут быть использованы и для всех остальных команд и являются регистрами общего назначения. vilerenko Можно запилить такой загрузчег и такую парадигму программирования, где стека существовать не будет. Менеджеру памяти различать стек и кучу надобности нет, видимо.И "Да" и "Нет". Да - если мы будем говорить о каких-то других языках. Нет - если ты используешь С или С++ то без стека обойтись не сможешь. Некоторые особенности этих языков подразумевают использование стека на уровне машинного языка. Посмотри в словаре слово "загрузчик". Это всё понятно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 19:35 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
White OwlНет - если ты используешь С или С++ то без стека обойтись не сможешь. в System/360 и потомках аппаратного стека нет, есть соглашения об использовании регистров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 20:04 |
|
||
|
Запись в стек или в кучу - что быстрее?
|
|||
|---|---|---|---|
|
#18+
Изопропилв System/360 и потомках аппаратного стека нет, есть соглашения об использовании регистров Ну если так считать, то вообще нигде аппаратного стэка нет, просто команды CALL-RET используют один договорной регистр как указатель. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2014, 20:31 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38583494&tid=2019624]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 152ms |

| 0 / 0 |
