¿Por qué la mitad de mi archivo objetivo (C) compilado es un gran bloque de ceros?

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

  •  02-07-2019
  •  | 
  •  

Pregunta

Abrí mi aplicación compilada Hello World Obj-C en un editor de texto y, para mi sorpresa, encontré alrededor de 8 kilobytes de 00 00 00 00 00 00 00 00 ....

¿Por qué están aquí? ¿Hay alguna manera de eliminar estos ceros (que dudo que tengan demasiado mucha función)?

Obviamente, no es tan importante en este archivo, ya que para empezar solo tiene 16kB, pero me gustaría saberlo de todos modos.

¿Fue útil?

Solución

Es muy probable que el relleno entre el código, los datos, la reubicación u otras secciones del formato ejecutable que uses.

A los enlazadores les gusta rellenar dichas secciones en un límite de 4k o 8k. Esto mejora el tiempo de carga por el precio de un poco de pérdida de memoria.

Para un simple hola mundo es significativo, pero para una aplicación grande, la memoria extra utilizada para el relleno es despreciable.

Otros consejos

¿Objective-C admite enlaces incrementales? Eso explicaría por qué había mucho espacio de relleno.

Algunos compiladores o enlazadores desean algún número redondo para el tamaño del archivo. Puede ver eso cuando agrega algún código, pero el tamaño del archivo no aumenta. Supongo que esos son los ceros que estás viendo.

¿Tal vez es una variable estática? Sé que en muchos lenguajes tipo C, el valor inicial de una variable que se declara estática está incrustado en el código emitido por el compilador. En tiempo de ejecución, este valor inicial se asigna a la memoria del proceso. Tal vez usted (o algún código que esté incluyendo o vinculando) defina una matriz de 8 KB con inicialización cero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top