Вернусь к вопросу о 64-разрядной архитектуры (не нашёл куда ещё написать, но т.к. тут вопос поднимался, продолжу) :
Специально приведу цитаты из книги Роберта Лав "Разработка ядра Linux" в своём изложении :
Цитата:
Размер машинного слова и типы данных
Машинное слово (word) - это количество данных, которое процессор может обработать за одну операцию.
Для каждой машинной плаьформы, поддерживаемой OS Linux в файле <asm/types.h> определяется констаета BITS_PER_LONG, которая равна размеру типа long языка C и совпадает с размером машинного слова системы.
Для ОС Linux размер типа long гарантировано равен размеру машинного слова.
- Нет никакой гарантии, что размер типа int всегда равен 32, хотя сегодня это так. Это касается и short равный на сегодня равен 16.
- Никогда нельзя быть уверенным, что тип long имеет какой-то заданный размер (сегодня 32 или 64 - связан с размером машинного слова),
- Никогда нельзя предпологать, что размер указателя совпадает с кодом int (зависит от архитектуры).
- Нельзя предпологать, что тип int совпадает с размером long (зависит от азхитектуры).
- Размер указателя всегда равен размеру машинного слова (long)
- Большинство системных (скрытых) типов определены как long, хотя для скрытых типов нельзя ничего утверждать наверняяка (полностью зависит от архитектуры).
Выравнивание данных
Выравнивание (alligment) соответствует размещению размера порций данных в памяти. Говорят, что переменная имееет естественное выравнивание (natural alligmend), если она находится в памяти по адресу, кратному её размеру. (32 разр. тип - кратное 4 байтам, 64 раз - 8 байтам).
Выравнивание (начала) структуры и объединения осуществляется по максимальному размеру типа из составляющих его простых элементов, выравнивание внутри структуры, может задаваться при компиляции.
Массив и его элементы выравнивается- по размеру элемента.
На некоторых системах (RISC) - загрузка неправильно выровненного значения приводит к генерации системного прерывания, для других это просто приводит к снижению быстродействия. Большинство программ имеют правильное выравнивание.
Размер страницы паяти памяти - зависит от архитектуры, на сегодня для ix86 и x86_64 равен 4k байтам , но в других архитектурах этот размер может быть другим.
|
Отсюда можно сделать вывод - для программ, в которых используюются указатели. А это большинство программ - работа со стеком (функции) и т.п. размер занимаемой памяти возрастает (указатель=64, а не 32 бит).
Если-же отменить выравнивание на размер слова (если это возможно), то пострадает быстродействие, но всё равно, размер указателя в 2 раза больше, чем в ix86 архитектуре.