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

start [/forum/topic.php?all=1&fid=57&tid=2019624]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
183ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 484ms |

| 0 / 0 |
