Perché metà del mio file obiettivo-C compilato (piccolo) è un grande blocco di zero?

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

  •  02-07-2019
  •  | 
  •  

Domanda

Ho aperto la mia applicazione Hello World Obj-C compilata in un editor di testo e, con mia sorpresa, ho trovato circa 8 kilobyte di 00 00 00 00 00 00 00 00 ....

Perché sono qui? C'è un modo per cancellare questi zeri (che dubito abbiano troppo molte funzioni)?

Ovviamente non è così importante in questo file, visto che sono solo 16kB per cominciare, ma mi piacerebbe saperlo comunque.

È stato utile?

Soluzione

Molto probabilmente è il riempimento tra codice, dati, trasferimento o altre sezioni del formato eseguibile che si utilizza.

Ai linker piace riempire tali sezioni su un limite di 4k o 8k. Ciò migliora i tempi di caricamento al prezzo di un po 'di spreco di memoria.

Per un semplice mondo ciao è significativo, ma per un'applicazione di grandi dimensioni la memoria aggiuntiva utilizzata per il padding è neglible.

Altri suggerimenti

Objective-C supporta il collegamento incrementale? Ciò spiegherebbe perché c'era molto spazio di imbottitura.

Alcuni compilatori o linker vogliono un numero tondo per la dimensione del file. Puoi vedere che quando aggiungi del codice, tuttavia la dimensione del file non aumenta. Immagino che siano gli zeri che stai vedendo.

Forse è una variabile statica? Conosco in molti linguaggi simili a C, il valore iniziale di una variabile dichiarata statica è incorporata nel codice emesso dal compilatore. In fase di esecuzione questo valore iniziale è mappato alla memoria del processo. Forse tu (o un codice che stai includendo o collegando) definisci un array inizializzato zero da 8 KB.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top