Почему половина моего скомпилированного (маленького) файла target-C - это большой блок нулей? - PullRequest
3 голосов
/ 28 сентября 2008

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

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

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

Ответы [ 4 ]

7 голосов
/ 28 сентября 2008

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

Линкерам нравится заполнять такие секции на границе 4k или 8k. Это сокращает время загрузки по цене небольшого количества памяти.

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

0 голосов
/ 28 сентября 2008

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

0 голосов
/ 28 сентября 2008

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

0 голосов
/ 28 сентября 2008

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

...