Почему половина моего скомпилированного (небольшого) файла Objective-C представляет собой большой блок нулей?

StackOverflow https://stackoverflow.com/questions/146025

  •  02-07-2019
  •  | 
  •  

Вопрос

Я открыл скомпилированное приложение Hello World Obj-C в текстовом редакторе и, к своему удивлению, обнаружил около 8 килобайт 00 00 00 00 00 00 00 00....

Почему они здесь?Есть ли способ очистить эти нули (в чем я сомневаюсь) слишком много функций)?

Очевидно, это не так важно в этот файл, поскольку изначально он весит всего 16 КБ, но я все равно хотел бы знать.

Это было полезно?

Решение

Скорее всего, это заполнение между кодом, данными, перемещением или другими разделами используемого вами исполняемого формата.

Линкеры любят дополнять такие разделы на границе 4 КБ или 8 КБ.Это сокращает время загрузки за счет некоторой траты памяти.

Для простого hello world это важно, но для большого приложения дополнительная память, используемая для заполнения, незначительна.

Другие советы

Поддерживает ли Objective-C инкрементальное связывание?Это объяснило бы, почему было много места для заполнения.

Некоторым компиляторам или компоновщикам требуется округленное число для размера файла.Вы можете видеть, что когда вы добавляете код, размер файла не увеличивается.Я думаю, это нули, которые вы видите.

Может быть, это статическая переменная?Я знаю, что во многих C-подобных языках начальное значение переменной, объявленной статической, встроено в код, создаваемый компилятором.Во время выполнения это начальное значение отображается в память процесса.Возможно, вы (или какой-либо код, который вы включаете или ссылаетесь на него) определяете массив размером 8 КБ с нулевой инициализацией.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top