programing

C ++의 sizeof는 컴파일 타임이나 런타임에 평가됩니까?

minecode 2021. 1. 15. 07:57
반응형

C ++의 sizeof는 컴파일 타임이나 런타임에 평가됩니까?


예를 들어이 코드 조각의 결과는 어떤 컴퓨터에 따라 다릅니다. 컴파일러 컴퓨터 또는 컴퓨터 실행 파일이 작동합니까?

sizeof(short int)

sizeof 컴파일 시간 연산자입니다.


프로그램을 실행하는 기계에 따라 다릅니다. 그러나 값은 컴파일 타임에 평가됩니다. 따라서 컴파일러는 (물론) 자신이 컴파일하는 머신을 알아야합니다.


sizeof는 컴파일 시간에 평가되지만 실행 파일이 컴파일 시간과 런타임 값이 다른 시스템으로 이동되면 실행 파일이 유효하지 않습니다.


C99부터 sizeof는 피연산자가 가변 길이 배열 인 경우에만 런타임에 평가됩니다 (예 : int a [b], 여기서 b는 컴파일 타임에 알려지지 않음). 이 경우 sizeof (a)는 런타임에 평가되고 그 결과는 전체 배열의 크기 (바이트 단위), 즉 배열의 모든 요소가 결합 된 크기입니다. 배열의 요소 수를 얻으려면 sizeof(a) / sizeof(b). C99 표준에서 :

sizeof 연산자는 피연산자의 크기 (바이트 단위)를 산출하며, 표현식 또는 유형의 괄호로 묶인 이름 일 수 있습니다. 크기는 피연산자의 유형에 따라 결정됩니다. 결과는 정수입니다. 피연산자의 유형이 가변 길이 배열 유형이면 피연산자가 평가됩니다. 그렇지 않으면 피연산자가 평가되지 않고 결과는 정수 상수입니다.

이 모든 것은 힙에 배열을 할당했을 때 얻을 수있는 것과 다릅니다 (예 : int* a = new int[b]. 이 경우 sizeof (a)는 배열에있는 요소의 수에 관계없이 int에 대한 포인터의 크기, 즉 4 바이트 또는 8 바이트를 제공합니다.

참조 URL : https://stackoverflow.com/questions/2615203/is-sizeof-in-c-evaluated-at-compilation-time-or-run-time

반응형