C언어 alignment striction 관련해서 질문이 있습니다.
글쓴이: adzoo / 작성시간: 금, 2016/10/21 - 10:14오전
안녕하세요. 대학생 4학년 학부생입니다.
코딩을 하다가 갑자기 궁금한게 생겨서 질문드립니다.
OS(CPU)마다 address access 단위로 인하여 int 데이터형 크기가 다르잖아요
x86 x64에 따라 4byte 8byte 처럼
질문이 있습니다.
보통 프로그래밍할 때 Memory를 아끼기 위해
사용할 변수가 적은 수의 범위를 사용한다면
unsigned char(uint8_t)형이나 unsigned short(uint16_t) 사용하지 않습니까?
근데 address access 단위가 4byte라면 결국 주소를 접근하게 되면 저 변수들도 4byte로 읽을 거 같은데
그래서 1byte 변수를 사용해도 3byte는 alignment striction으로 인하여 padding bit가 될거 같은데
제 생각이 맞는지 궁금합니다.
1)
char a=3;
int b=3;
이거나
2)
int a=3
int b=3
이거나
결국 1)은 address access로 인하여 메모리를 차지하는 것은 5byte가 아니라 8byte아닌가요?
만약 위의 가정이 맞다면 실제 프로그램에서도 5byte가 아닌 8byte를 사용하는건가요?
답변 부탁드립니다.
감사합니다.
Forums:
char, short로 되어 있어도 4바이트로(혹은
char, short로 되어 있어도 4바이트로(혹은 시스템에 따라 그에 맞는 길이로)
읽어서 1바이트 혹은 2바이트로 변환해서 돌려줍니다.
그래서 char, short로 구현시 int 구현 할 때 보다 더 느릴 수 있다고 배웠네요.
Different size integer types:
Typically, CPUs are fastest at operating on integers of their native word size (with some caveats about 64-bit systems). 32 bit operations are often faster than 8- or 16- bit operations on modern CPUs, but this varies quite a bit between architectures. Also, remember that you can't consider the speed of a CPU in isolation; it's part of a complex system. Even if operating on 16-bit numbers is 2x slower than operating on 32-bit numbers, you can fit twice as much data into the cache hierarchy when you represent it with 16-bit numbers instead of 32-bits. If that makes the difference between having all your data come from cache instead of taking frequent cache misses, then the faster memory access will trump the slower operation of the CPU.
(http://stackoverflow.com/questions/5069489/performance-of-built-in-types-char-vs-short-vs-int-vs-float-vs-double)
질문자의 말이 맞습니다.
안녕하세요 질문자의 말이 맞습니다.
1바이트를 사용하더라도 실제 메모리에는 펜딩 비트가 생기죠
단, 메모리에는 연속적인 공간에 저장하므로 다음 데이터형도 1바이트라면 똑같이 4바이트를 사용하게 됩니다.
다음 처럼요
char a;
int b;
8바이트 사용.
char a;
char b;
int c;
8바이트 사용.
수고하세요~
댓글 달기