LINUX.ORG.RU

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


0

0

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

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

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

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

theos ★★★ ()

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

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

ansi ★★★★ ()
Ответ на: x86_64 потребление памяти от theos

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

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

alex_custov ★★★★★ ()

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

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

pavel5 ()
Ответ на: x86_64 потребление памяти от alex_custov

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

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

twosev ★★ ()

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

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

Legioner ★★★★★ ()
Ответ на: x86_64 потребление памяти от pavel5

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

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

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

mv ★★★★★ ()

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

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

anonymous ()
Ответ на: x86_64 потребление памяти от Karapuz

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

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

Reset ★★★★★ ()
Ответ на: x86_64 потребление памяти от Reset

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

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


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

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