2010-07-08 1 views
14

sizeof의 주요 기능은 무엇입니까 (C++을 처음 사용함). 예를sizeof는 무엇을합니까?

int k=7; 
char t='Z'; 

를 들어 sizeof (k) 또는 sizeof (int)sizeof (char)은 무엇을 의미합니까?

+0

당신의 문자가 누락되었습니다. – Konrad

+8

@Tyler McHenry 타이밍은 0.08 초에 나를 위해 표에서 조금 떨어져있다. – DumbCoder

+8

@davit : 프로그래밍 언어를 배우려는 경우 언어에 대한 입문서를 읽으면서 시험, 오류, 추측 및 끝없는 질문에 대한 기본 지식을 얻으십시오. –

답변

49

sizeof(x)은 변수 또는 유형 x이 차지하는 메모리 양 (바이트 단위)을 반환합니다. 변수의 값과는 아무 관련이 없습니다.

예를 들어 어떤 유형의 배열이 T 인 경우 해당 배열의 요소 간 거리는 정확히 sizeof(T)입니다.

변수 사용
int a[10]; 
assert(&(a[0]) + sizeof(int) == &(a[1])); 

그것은 그 변수의 유형을 사용하는 것과 동일하다 : 경험적으로

T x; 
assert(sizeof(T) == sizeof(x)); 

, 그 변수 명 어디에 사용하는 것이 가장 좋다 가능한 단지의 경우에 유형 변경 :

사용자 정의 유형에 사용
int x; 
std::cout << "x uses " << sizeof(x) << " bytes." << std::endl 
// If x is changed to a char, then the statement doesn't need to be changed. 
// If we used sizeof(int) instead, we would need to change 2 lines of code 
// instead of one. 

, sizeof 아직도 그 유형의 인스턴스에 사용되는 메모리의 양을 반환하지만이하지 않는 것을 지적 가치 그 구성원의 합계가 필요합니다. sizeof(int) + sizeof(char) 동안

struct Foo { int a; char b; }; 

는 컴파일러가 4 개 바이트 경계에 놓 이도록 구조를 pad out해야하기 때문에 많은 시스템에서, sizeof(Foo)8을 할 수있다, 일반적으로 5입니다. 항상 그렇다고는 할 수 없으며 컴퓨터에서 sizeof(Foo)이 5 일 수는 있지만 가능하지는 않습니다.

+0

int는 변수 t에 sizeof (t) = 1보다 t = 100이 주어진 경우? –

+0

그러나 그것은 왜 –

+0

'sizeof'가 변수의 * value *와 아무 관련이 없음을 보여줍니다. 유형과 관련이 있습니다.여러분의 시스템에서,'int' 타입의 모든 변수는 4 바이트의 저장 공간을 필요로한다는 것을 알려줍니다. –

7

피터 알렉산더의 대답에 추가하려면 : sizeof 연산자가 (C 또는 C++에 의한) 메모리 주소의 가장 작은 단위로 정의되는 char --- char의 크기의 배수로 값 또는 유형의 크기를 산출 주어진 아키텍쳐 (그리고 C++에서는 적어도 표준에 따라 적어도 8 비트 크기). 이것은 일반적으로 "바이트"(지정된 아키텍처에 대해 주소 지정 가능한 단위가 가장 작음)로 의미가 있지만 분명히 명확한 점은 없으며 때로는 sizeof (char)의 변동성에 대한 질문이 항상 있습니다. 이는 항상 1입니다.

+0

바이트는 반드시 "주어진 아키텍처에서 가장 작은 주소 지정이 가능한 단위"는 아닙니다. 일부 CDC 사이버 컴퓨터에서는 주소 지정이 가능한 최소 단위가 16 비트 단어 (주소 0은 16 비트이고 주소 1은 고유 한 16 비트 임)이며 두 반쪽을 바이트로 나타냅니다. –

+0

@James : 맞습니다. 요점은 "바이트"는 본질적으로 모호한 용어이며, 사용자가 정의하는 방법에 관계없이 누군가 다른 방법으로 사용한다는 것입니다. CDC에 흥미 롭습니다. –

+0

대부분의 사람들은 한 바이트가 8 비트라는 것에 동의 할 것이고 혼란 스러울 지 모르지만 요즘은 표준화되어 있습니다 : IEC 80000-13. 반대로 컴퓨터에서 주소 지정이 가능한 최소 단위는 종종 단어라고하며 컴퓨터에 따라 다릅니다. 16 비트, 32 비트, 64 비트 아키텍처가 있지만 이러한 컨텍스트에서도 바이트는 여전히 8 비트입니다. – Zane