tar
файлы от установки в /usr/src/non-rpms
напомнить Вам (это - то, что я обычно делаю).Нет никакой непосредственной связи между размером исполняемого файла и размером в памяти. Вот очень быстрый обзор того, что происходит, когда двоичный файл выполняется:
Для получения дополнительной информации о форматах исполняемых файлов, соединении и исполняемой загрузке, можно считать Компоновщиков и Загрузчики John R. Levine.
В исполняемом файле 5 КБ вероятно, что все - код или данные, которые должны быть загружены в память за исключением заголовка. Исполняемый код составит по крайней мере одну страницу, возможно, два, и затем будет по крайней мере одна страница для стека, вероятно, одна страница или для "кучи" (другие данные), плюс память, используемая общими библиотеками.
В соответствии с Linux, можно осмотреть размещения в ОЗУ для исполняемого файла с cat /proc/$pid/maps
. Формат документируется в proc(5)
страница справочника; см. также Понимание Linux/proc/id/maps.
Да: Вы в конечном счете получаете две 4k страницы. Данные загружаются по требованию, поэтому если ничто никогда не будет относиться к второй странице, то это никогда не будет загружаться в память.
include/asm-i386/param.h:#define EXEC_PAGESIZE 4096
include/asm-i386/elf.h:#define ELF_EXEC_PAGESIZE 4096
Не изменяйте эти значения и ожидайте, что что-либо будет работать.
Да, размер файла хранится в inode в ext2/3.
Для части определения, на 2.6.38~ish ядро для архитектуры Intel:
arch/x86/include/asm/page_types.h:
/* PAGE_SHIFT определяет размер страницы */
#define PAGE_SHIFT 12
#define PAGE_SIZE (_AC (1, УЛ.) <<PAGE_SHIFT)