ݺߣ

ݺߣShare a Scribd company logo
[C++ Beginner] sizeof()
sizeof() 함부로 쓰면 큰일난다!
sizeof 알고 씁시다!
32bit 컴퓨터에서 이 코드의 실행 결과는?
int 형 데이터가 7개 있으므로 int 배열의 크기는 28byte 라는 것을 알 수 있습니다
따라서 sizeof(intarray)는 28로 나타날 것입니다
sizeof 알고 씁시다!
한 줄을 더 추가해 봅시다.
배열의 이름만 쓰면 배열의 시작 주소라는 사실을 알고 있으므로, int 포인터에 배열
시작주소를 넘겨준 다음 sizeof()로 배열의 크기를 알아볼 수 있을 것 같습니다.
어차피 위 코드의 intArray나 pointerOfArray나 똑같은 값을 가지고 있을 테니까요.
sizeof 알고 씁시다!
하지만 결과는 4 입니다.
4는 32bit 컴퓨터에서 포인터의 크기입니다.
sizeof가 배열이 아닌 포인터의 크기만 반환한 것
을 알 수 있습니다.
Why?
• 이런 일이 벌어지는 이유는 생각보다 간단한데, sizeof()는 함수
가 아닙니다.
• sizeof() 설명을 msdn에서 찾아보면, 컴파일러가 컴파일 시간에
sizeof()값을 바꿔치기 한다고 되어 있습니다.
• 다시 말해서 컴파일 시간에 알 수 있는 값만 sizeof()로 알 수 있
다는 뜻입니다.
• 따라서 실행 시간에 바뀔 여지가 있는 값은 sizeof()로 크기를 재
려고 해서는 안 됩니다.
Msdn에서 직접 검색해서 읽어보세요!
Why?
위 코드에서 intArray[]는 이미 컴파일 시간에 크기가 결정되어 있습니다.
따라서 컴파일러는 sizeof(intArray) 대신에 28이라는 값을 내놓는 것입니다.
Why?
만약 이런 함수가 있다면, 컴파일러가 알 수 있는 유일한 사실은 하나 뿐입니다.
arr 변수가 int 포인터라는 사실입니다.
따라서 sizeof(arr)은 32bit 기준으로 무조건 4로 바뀐 다음 실행 파일이 됩니다.
Test
따라서 함수의 인자로 배열의 포인터를 넘겨서 크기를 알아내려는 시도는
실망스러운 결과만을 남기게 됩니다
결론
어린이 여러분 C를 욕하세요

More Related Content

Viewers also liked (9)

PPTX
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
진상 문
PDF
WordPress 4.4 and Beyond
Scott Taylor
PPTX
Disrupt or be disrupted
Connected Futures
PDF
Writing Smarter Applications with Machine Learning
Anoop Thomas Mathew
PDF
8 Tips for Scaling Mobile Users in China by Edith Yeung
Edith Yeung
PDF
[Infographic] How will Internet of Things (IoT) change the world as we know it?
InterQuest Group
PDF
The Physical Interface
Josh Clark
PDF
Mobile Is Eating the World (2016)
a16z
PPTX
Network Effects
a16z
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
진상 문
WordPress 4.4 and Beyond
Scott Taylor
Disrupt or be disrupted
Connected Futures
Writing Smarter Applications with Machine Learning
Anoop Thomas Mathew
8 Tips for Scaling Mobile Users in China by Edith Yeung
Edith Yeung
[Infographic] How will Internet of Things (IoT) change the world as we know it?
InterQuest Group
The Physical Interface
Josh Clark
Mobile Is Eating the World (2016)
a16z
Network Effects
a16z

More from 진상 문 (9)

PPTX
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
진상 문
PPTX
Pervasive computing
진상 문
PPTX
ABI란 무엇인가요?
진상 문
PPTX
Dll 파일 호출의 2가지 방법
진상 문
PPTX
C# 뉴비를 위한 맛보기 2
진상 문
PPTX
C# 뉴비를 위한 맛보기
진상 문
PPTX
무중력 상태에 필요한 기초 물리
진상 문
PPTX
Easy gameserver
진상 문
PPTX
Halo ce anniversary Postmortem
진상 문
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
진상 문
Pervasive computing
진상 문
ABI란 무엇인가요?
진상 문
Dll 파일 호출의 2가지 방법
진상 문
C# 뉴비를 위한 맛보기 2
진상 문
C# 뉴비를 위한 맛보기
진상 문
무중력 상태에 필요한 기초 물리
진상 문
Easy gameserver
진상 문
Halo ce anniversary Postmortem
진상 문
Ad

[C++ beginner] sizeof()

  • 1. [C++ Beginner] sizeof() sizeof() 함부로 쓰면 큰일난다!
  • 2. sizeof 알고 씁시다! 32bit 컴퓨터에서 이 코드의 실행 결과는? int 형 데이터가 7개 있으므로 int 배열의 크기는 28byte 라는 것을 알 수 있습니다 따라서 sizeof(intarray)는 28로 나타날 것입니다
  • 3. sizeof 알고 씁시다! 한 줄을 더 추가해 봅시다. 배열의 이름만 쓰면 배열의 시작 주소라는 사실을 알고 있으므로, int 포인터에 배열 시작주소를 넘겨준 다음 sizeof()로 배열의 크기를 알아볼 수 있을 것 같습니다. 어차피 위 코드의 intArray나 pointerOfArray나 똑같은 값을 가지고 있을 테니까요.
  • 4. sizeof 알고 씁시다! 하지만 결과는 4 입니다. 4는 32bit 컴퓨터에서 포인터의 크기입니다. sizeof가 배열이 아닌 포인터의 크기만 반환한 것 을 알 수 있습니다.
  • 5. Why? • 이런 일이 벌어지는 이유는 생각보다 간단한데, sizeof()는 함수 가 아닙니다. • sizeof() 설명을 msdn에서 찾아보면, 컴파일러가 컴파일 시간에 sizeof()값을 바꿔치기 한다고 되어 있습니다. • 다시 말해서 컴파일 시간에 알 수 있는 값만 sizeof()로 알 수 있 다는 뜻입니다. • 따라서 실행 시간에 바뀔 여지가 있는 값은 sizeof()로 크기를 재 려고 해서는 안 됩니다. Msdn에서 직접 검색해서 읽어보세요!
  • 6. Why? 위 코드에서 intArray[]는 이미 컴파일 시간에 크기가 결정되어 있습니다. 따라서 컴파일러는 sizeof(intArray) 대신에 28이라는 값을 내놓는 것입니다.
  • 7. Why? 만약 이런 함수가 있다면, 컴파일러가 알 수 있는 유일한 사실은 하나 뿐입니다. arr 변수가 int 포인터라는 사실입니다. 따라서 sizeof(arr)은 32bit 기준으로 무조건 4로 바뀐 다음 실행 파일이 됩니다.
  • 8. Test 따라서 함수의 인자로 배열의 포인터를 넘겨서 크기를 알아내려는 시도는 실망스러운 결과만을 남기게 됩니다