Pourquoi la moitié de mon (petit) fichier objectif-C compilé est-il un gros bloc de zéros?

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

  •  02-07-2019
  •  | 
  •  

Question

J’ai ouvert mon application compilée Hello World Obj-C dans un éditeur de texte et, à ma grande surprise, j’ai trouvé environ 8 kilo-octets de 00 00 00 00 00 00 00 00 ....

Pourquoi sont-ils ici? Existe-t-il un moyen de supprimer ces zéros (dont je doute qu'ils aient aussi beaucoup de fonctions)?

Évidemment, ce n'est pas si important dans ce fichier , car il ne s'agit que de 16 ko pour commencer, mais j'aimerais tout de même le savoir.

Était-ce utile?

La solution

Il est très probable que vous utilisiez du code, des données, une relocalisation ou d'autres sections du format exécutable que vous utilisez.

Les lieurs aiment placer de telles sections sur une limite de 4k ou 8k. Cela améliore le temps de chargement pour le prix d’un peu de perte de mémoire.

Pour un monde simple, c'est important, mais pour une grande application, la mémoire supplémentaire utilisée pour le remplissage est négligeable.

Autres conseils

Objective-C prend-il en charge la liaison incrémentielle? Cela expliquerait pourquoi il y avait beaucoup d'espace de rembourrage.

Certains compilateurs ou éditeurs de liens veulent un nombre rond pour la taille du fichier. Vous pouvez voir que lorsque vous ajoutez du code, la taille du fichier n'augmente pas. Je suppose que ce sont les zéros que vous voyez.

Peut-être que c'est une variable statique? Je sais que dans de nombreux langages de type C, la valeur initiale d'une variable déclarée statique est intégrée au code émis par le compilateur. Au moment de l'exécution, cette valeur initiale est mappée à la mémoire du processus. Peut-être que vous (ou un code que vous incluez ou dont vous faites le lien) définissez un tableau initialisé à zéro de 8 Ko.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top