강좌 & 팁
글 수 2,412
2012.04.08 19:01:08 (*.172.215.154)
43763
주소값을 표현해보면 이런식으로 메모리에 저장이 되는데 비어있는 공간이 생긴다(검은색 칠해진 부분) 이 메모리는 결국사용을 하지 않는다. 과거에는 메모리의 양이 적어서 사용을 하지만 요즘에는 메모리의 용량이 커져서 저 빈공간이 매우 미미한 양이므로 사용하지 않는다. pc는 보통 32비트이기 때문에 최적화를 시킬때에 4의 배수 --->2의 배수 ---> 1의배수 순으로 최적화를 한다. pc의 버스가 32비트를 보내면 32 비트를 전송하지만 8비트를 보내면 24비트를 차단시킨후 8비트만 보내기 때문에 32비트 보낼때보다 8비트를 보낼때가 속도가 느리다. 위 그림에서 L을 J앞의 빈공간을 사용해서 보낼수가 있는데 이것이 속도 최적화 방식이다. pc에서는 메모리가 크기 때문에 메모리 최적화 보다는 속도 최적화에 중점을 둬야하고, 임베디드 에서는 속도 또는 메모리 둘 중 하나를 선택하여 최적화를 해야한다. 상황에 따라 최적화 방식을 선택하면 된다. [부호확장] char A = -1; char B = 0xFF; char C = 255; int D = C; unsigned int E = C; C를 출력해보면 -1이 나온다. char C = 255 에 비트를 보면
이다 기본적으로 signed 형이기 때문에 -1이 된다. 1바이트를 4바이트에 넣는 경우인데 제일 앞 비트가 1이므로 음수로 치고 1을 앞비트에 다붙인다.
이것을 signed 부호확장이라고 한다 unsigned int E = C; 도 E를 출력해보면 애초에 C가 signed 형이기때문에 signed 부호확장이 일어나 -1이 된다.
77은
제일 앞이 0이다 0일때는 나머지 비트에 0이 들어가는데 이것을 제로확장 이라고 한다. *unsigned int D= char C; 형변환이 일어나는데 형변환의 순서는 1바이트를(char)먼저 4바이트로 변화 시키고 int D에 대입하는 순서로 한다. CPU에서 변환을 시키게 되는데 그때에 원본의 형을 따라서 변환이 일어난다(signed 나 unsigned) 원본의 형이 signed 면 부호확장 unsigned면 제로확장이 일어나게 된다. |