sintaxis punteros memoria estructuras ejemplos dinamica c++ runtime sizeof compile-time

punteros - ¿Se evalúa sizeof en C++ en tiempo de compilación o tiempo de ejecución?



sizeof en c sintaxis (4)

A partir de C99, sizeof se evalúa en el tiempo de ejecución si y solo si el operando es una matriz de longitud variable, por ejemplo, int a [b], donde b no se conoce en tiempo de compilación. En este caso, el tamaño de (a) se evalúa en tiempo de ejecución y su resultado es el tamaño (en bytes) de toda la matriz, es decir, el tamaño de todos los elementos en la matriz, combinados. Para obtener la cantidad de elementos en la matriz, use sizeof(a) / sizeof(b) . Del estándar C99:

El operador sizeof produce el tamaño (en bytes) de su operando, que puede ser una expresión o el nombre entre paréntesis de un tipo. El tamaño se determina a partir del tipo de operando. El resultado es un entero. Si el tipo del operando es un tipo de matriz de longitud variable, se evalúa el operando; de lo contrario, el operando no se evalúa y el resultado es una constante entera.

Tenga en cuenta que todo esto es diferente de lo que obtendría si asignara una matriz en el montón, por ejemplo int* a = new int[b] . En ese caso, sizeof (a) simplemente le daría el tamaño de un puntero a int, es decir, 4 u 8 bytes, independientemente de cuántos elementos hay en la matriz.

Por ejemplo, el resultado de este fragmento de código depende de la máquina: ¿funciona la máquina del compilador o el archivo ejecutable de la máquina?

sizeof(short int)


Depende de la máquina que ejecuta su programa. Pero el valor se evalúa en tiempo de compilación. Por lo tanto, el compilador (por supuesto) tiene que saber para qué máquina está compilando.


sizeof se evalúa en tiempo de compilación, pero si el ejecutable se mueve a una máquina donde el tiempo de compilación y los valores de tiempo de ejecución serían diferentes, el ejecutable no será válido.


sizeof es un operador de tiempo de compilación.