변수형을 short로하면 제대로 작동안되던 코드가 int로 하니까 잘되는 경우가 있네.. 난 short가 걍 범위 적은 변수형인줄 알았는데 뭔가 다른 게 있는건가?
음 short와 int는 무슨 차이가 있는거임?
퍙퍄(1.214)
2015-05-05 20:16
추천 0
댓글 10
다른 게시글
-
디씨 덧글 쓸 때 금칙어 피하는 팁. [107]ㅅㅅㅅ(125.128) | 15.05.05추천 1
-
밑에 다익스트라랑 LP관련글 있길레 나도 비슷한거 궁금한거 물어봄 [16]samuro(221.140) | 15.05.05추천 0
-
리눅스 잘아는게이 나와라! [2]123(175.125) | 15.05.05추천 0
-
좆밥 오목설계도 다시그려왔습니다 [39]dd(122.32) | 15.05.05추천 0
-
아이유이쁘다 [4]ㅇㅁㄴㅇㅁ..(58.225) | 15.05.05추천 0
-
궁금한건데 아이온 같은 게임은 멀로 만듬? [2]ㄴㅁㅇㄹ(220.77) | 15.05.05추천 0
-
유니티 가르치는 겜학원이 생각보다없네영ㄷㄷ [3]천천히 살..(kiop7139) | 15.05.05추천 0
-
그나마 다행인게 일베가 [2]ㅅㅅㅅ(125.128) | 15.05.05추천 0
-
게임 쪽으로 가고 싶다.121322(125.178) | 15.05.05추천 0
-
초보들이 stdio.h를 studio.h라고 오타내는 이유 [1]ㅅㅅㅅ(125.128) | 15.05.05추천 0
int는 긴가보지
scanf로 입력을 받을 때 short int(short)는 h를 붙여야 하고 long int(long)는 l을 붙여야 함. 가령 %d를 한다고 할 때 short int 변수를 줬으면 %hd를 써야 함.
안 그러면 메모리 오류 난다.
용량 차이라고봄, 쓸데없이 1mb 만 써도 되는 파일을 굳이 1tb 용량을 빌리면서까지 저장할필요가 없는것처럼, 필요한 용량에 따라 short 쓰든 int 쓰던가 하는거임. 만약에 값 1,2,3,4 같은 작은수를 담을때 int 를 쓰는건 크게 상관은없지만 나중에 게임을만들든 어플을만들든 하다보면 용량때문에 로딩속도가 느린 경우가있을거임. 그런것들을 줄이기위해 꼭 필요한 공간만 사용하는 뭐 그런거일듯!?
short는 32비트 CPU 명령어셋에 구겨넣기 힘들어서 오히려 int보다 속도가 저하되는 경우도 있음. 그래서 short로 선언했는데 컴파일러가 옵션에 따라 멋대로 패딩을 넣어서 int로 바꾸기도 함
ㅇㅇ 속도는 int가 제일 빠르지. (일반적으로 많은 컴파일러에서) 프로세서가 한방에 처리할 수 있는 정수 크기인 워드 사이즈(32비트에서는 32비트, 64비트에서는 64비트)로 맞춰지니까. char나 short는 메모리 용량은 적게 들어도 int보다는 느림. CPU는 메모리 접근 한 번 할 때 MBR(Memory Buffer Register)의 크기만큼 접근하게 되고 이 크기는 워드 사이즈와 같음. 다시 말해 32비트 프로세서에서는 32비트(4바이트)씩 메모리를 읽고 64비트에서는 8바이트씩 메모리를 읽음. 그럼 2바이트 변수는 어떻게 되냐고? 예를 들어 2바이트 변수의 값을 바꾸면 CPU에서는 4바이트 값을 읽어서 거기서 2바이트만 바꿔서 다시 4바이트 쓰기를 한다. 반면
4바이트 크기인 int형(지금 하는 가정이 32비트 프로세서니깐)인 경우에는 메모리 읽기를 하지 않고 바로 쓰기를 하지. 그게 4바이트와 2바이트의 속도 차이임. 메모리 용량이 많아진 지금 와서 메모리 아끼는 건 별 의미 없으므로 그냥 int 형 쓰는 게 제일 좋음.
이런 거 때문에 컴파일러에서는 구조체를 선언할 때도 내부적으로 Byte Alignment니 이상한 최적화를 잔뜩 한다. 다 땔깜들이 짠 프로그램을 최대한 빨리 돌아갈 수 있게 하기 위한 조치인 거지.
위에서 ㅁ가 이야기한 대로 short형 변수를 선언해도 zero padding 넣어서 공간은 int 형으로 맞춰주는 것도 저 이유 때문임. 불필요한 memory read 연산을 막을 수 있지.
크으 지렸다