SlideShare 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

Viewers also liked (9)

Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part1
 
WordPress 4.4 and Beyond
WordPress 4.4 and BeyondWordPress 4.4 and Beyond
WordPress 4.4 and Beyond
 
Disrupt or be disrupted
Disrupt or be disruptedDisrupt or be disrupted
Disrupt or be disrupted
 
Writing Smarter Applications with Machine Learning
Writing Smarter Applications with Machine LearningWriting Smarter Applications with Machine Learning
Writing Smarter Applications with Machine Learning
 
8 Tips for Scaling Mobile Users in China by Edith Yeung
8 Tips for Scaling Mobile Users in China by Edith Yeung8 Tips for Scaling Mobile Users in China by Edith Yeung
8 Tips for Scaling Mobile Users in China by Edith Yeung
 
[Infographic] How will Internet of Things (IoT) change the world as we know it?
[Infographic] How will Internet of Things (IoT) change the world as we know it?[Infographic] How will Internet of Things (IoT) change the world as we know it?
[Infographic] How will Internet of Things (IoT) change the world as we know it?
 
The Physical Interface
The Physical InterfaceThe Physical Interface
The Physical Interface
 
Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)Mobile Is Eating the World (2016)
Mobile Is Eating the World (2016)
 
Network Effects
Network EffectsNetwork Effects
Network Effects
 

More from 진상 문 (9)

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

Recently uploaded

캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
cho9759
 
INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
ahghwo99
 

Recently uploaded (7)

인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
인천대학교 컴퓨터공학과 아틀란티스 졸업작품 commINUty PPT
 
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
인천대학교 캡스톤디자인(2) Pencil me 프레젠테이션 발표자료 파일
 
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라(독서광) 대격변 AI 시대,   데이터로 사고하고   데이터로 리드하라
(독서광) 대격변 AI 시대, 데이터로 사고하고 데이터로 리드하라
 
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
2024년 5월 27일 개발자 이야기 - AWS 람다의 내부 동작 방식 외
 
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
캡스톤-디자인-최종-발표-(대상혁) 24년도 졸업작품발표회 ppt.pptx
 
INU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrintINU Graduation Powerpoint-Rabbit FootPrint
INU Graduation Powerpoint-Rabbit FootPrint
 
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
암호화 보안USB & 외장하드 중앙관리 솔루션 ‘DataLocker SafeConsole’_DATASHEET
 

[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 따라서 함수의 인자로 배열의 포인터를 넘겨서 크기를 알아내려는 시도는 실망스러운 결과만을 남기게 됩니다