LINUX.ORG.RU

x86_64 потребление памяти


0

0

неоднократно встречались отзывы, что x86_64 программы едят больше памяти, чем 32-битные аналоги, - на ЛОРе и в других местах. Никаких толковых объяснений не видел (указатели в два раза больше, стек в два раза больше и пр.) Почему так происходит?

Так вроде сам уже написал. int & long & void * в 64 битной системе имеют размер 8 байт против 4 в 32 битной.

Ещё в 64битной адресации AFAIK получается больше жрётся на тааблицу преобразований виртуальных страниц из-за трёх-уровневости (но на сколько это влияет и влияет ли я не знаю).

theos ★★★
()

меня нет, тебя нет, никого нет, ... gooooooogle также нет

ansi ★★★★
()
Ответ на: комментарий от theos

ЕМНИП gcc использует модель LP64, а это значит что int-ы будут 32-битные, а на них как правило приходится почти вся доля целочисленных переменных, так что не подходит. Стек растёт динамически, тоже не подходит. Указатели вообще можно не учитывать.

alex_custov ★★★★★
() автор топика

Насчет стека не знаю, но указатели действительно в два раза больше (занимают 8 байт вместо 4). Если программе нужно хранить в памяти например двусвязный список из милииона элементов, то 64бит прога будет расходовать на 8мб больше памяти (2 миллиона указателей, размер каждого в 64бит программе больше на 4 байта).

pavel5
()
Ответ на: комментарий от alex_custov

Как это не учитывать? Память уже одними только указателями сжирается почти до двух раз, ибо из-за них любая структура данных, реализующая связную работу элементов, будет кушать памяти «несколько» побольше.

twosev ★★
()

В большинстве программ бОльшую часть данных занимают строки, картинки. Не могу представить себе программу, 90% данных которой - указатели. Поэтому формально больше, реально, скорее всего, не намного.

Legioner ★★★★★
()
Ответ на: комментарий от pavel5

> Если программе нужно хранить в памяти например двусвязный список из милииона элементов, то 64бит прога будет расходовать на 8мб больше памяти (2 миллиона указателей, размер каждого в 64бит программе больше на 4 байта).

А что мешает в 64-битной программе использовать 32-битные указатели? Кроме того, у x86-64, как и у x86, есть индексный режим адресации, в котором ячейка памяти адресуется двумя регистрами. В одном регистре находится базовый адрес, в другом - смещение, оба адреса могут быть 32-битными, и тут нет ограничения на адресуемые 4 гб, как с 32-битными указателями.

mv ★★★★★
()
Ответ на: комментарий от Karapuz

Ух-ты! Опубликован список хабрагоблинов!

mv ★★★★★
()

А про выравнивание по словам так никто и не вспомнил или я по диоганали читал опять?

anonymous
()
Ответ на: комментарий от Karapuz

Нашел чего в пример приводить. Чушь всё от первого до последнего слова. Особенно «порадовало» про ia32-libs в бубунте. Дык это косяк бубунты, что они не могли оформить 32х битные либы также как и сделано в нормальных дистрибутивах.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Нашел чего в пример приводить. Чушь всё от первого до последнего слова


Шо, неужели в авангарде нашего веба, на хабре, такие негодные специалисты?

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

Судя по той писанине, специалистов там вообще нет.

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.