2010-12-10 16 views
5

He escrito las mismas líneas de código en el entorno de compilación C y C++ de visual Studio 2008 pero el tamaño del archivo de objeto del código C es 5.5kb y el tamaño del archivo de código C++ es 6.17 kb. ¿Por qué esta diferencia?Por qué el tamaño del archivo de objeto cambia para el mismo código en C y C++

siguiente es el código en ambos entornos:

#include <stdio.h> 

struct S 
{ 
    char c; 
}; 
void func() 
{ 
    int i; 
    int j; 
    printf("%d", i); 
} 

int main() 
{ 
    struct S s; 
    return 0; 
} 
+2

Bueno, los diferentes idiomas tienden a ser diferentes. Eso es lo que significa "diferente". ;) – jalf

+2

Es más grande, porque más grande es mejor. –

Respuesta

5

Enlaza diferentes bibliotecas C de tiempo de ejecución en cada caso. Check here para una explicación detallada. Por ejemplo, libcmt.lib contra libcpmt.lib.

+0

¿Por qué? Debido a que el código es el mismo, las mismas partes deben estar vinculadas, por lo que yo pienso. – Vikas

+8

Porque C y C++ son diferentes lenguajes de programación. –

+3

@Vikas: en C++ necesita tener, por ejemplo, el código para manejar la asignación específica de excepción o C++ ("nuevo", "eliminar"). Puede intentar deshabilitar el manejo de excepciones en su proyecto de C++ y debería reducir el tamaño del archivo. – patriiice

-4

El archivo de inclusión stdio.h tiene una mucho compilación más complicado para C++ ya que probablemente se deriva de las funciones stdio en la parte superior de las funciones iostreams. Para una compilación C directa, iostream no se usa. Por lo que el archivo de objeto es menor en C.


edición

No creo que muchos de los downvoters entiendo la pregunta. OP pregunta por qué el archivo de objeto ha aumentado de tamaño. No es el ejecutable. No la biblioteca

Después de mirar stdio.h para VS 2008, veo que las diferencias de compilación para C++C y no son tan dramáticos como lo son para gcc, que fue la base de mi respuesta original. Aún así, el espacio de nombres y los símbolos externos mutilados hacen que el archivo objeto sea más grande.

+2

Espero que esta no sea una pregunta de entrevista para usted. –

5

El hecho de que su código tenga un significado diferente en C y C++.

  • En C++ se declaran funciones que reciben ningún argumento, en C que declarar funciones que tienen un número indeterminado de argumentos. (Nunca cambiar la firma de main)
  • nombres de función se truncan en C++
  • funciones pueden arrojar excepciones en C++
  • ejecutables están enlazadas contra bibliotecas diferentes por defecto
  • debido a la falta de inicialización de i la llamada a printf tiene comportamiento indefinido. Ambos idiomas pueden decidir sobre diferentes estrategias para dispararle.
+0

Aunque todas estas cosas son ciertas, el único punto sobresaliente es el conjunto de bibliotecas que están vinculadas en. –

+1

@Adam: no estoy seguro, él está hablando de los archivos objeto, no de los archivos ejecutables. Por lo que puedo ver en mi máquina, la diferencia está en el tamaño de la tabla de símbolos. Para mí, la versión C tiene exactamente los tres símbolos externos que se mencionan, para C++ hay más. –

Cuestiones relacionadas