IT

메모리구조

2011. 6. 17. 14:35 : 소프트웨어/Linux

코드영역 - 기계어 + 상수(Read)

BSS     - 전역변수(R/W)

DATA   - 전역변수(R/W)

heap    - 동적할당(R/W)

Stack    - 지역변수(R/W)


함수 주소 - 코드 영역

문자열    - 코드 영역

상수      - 코드 영역


16비트 cpu

intel 기준

ip

명령어 해석 레지스터

amd/기타 기준

pc

명령어 해석 레지스터


32비트 cpu

intel 기준

eip

명령어 해석 레지스터

amd/기타 기준

epc

명령어 해석 레지스터


ip레지스터에 함수주소를 넣어주면

함수가 실행된다.


문자열의 따옴표 타입 -> const char *

printf("하이\n"); -> printf(const char *) 타입


가변인자(printf)

반환 함수명(기존 타입,...)

va_list


            char carray[] = { 'a','b','c' };

3byte XXX Stack(R/W) | 3byte a,b,c Code (R)  - 총 6바이트 소모


char astring[] = { 'a','b','c','\0' };

char bstring[] = "abc";


astring 과 bstring의 메모리 동작은 동일하다 (R/W)

둘다 8바이트를 소모한다.


                char *cstring = "abc";

4byte XXXX Stack(R/W) | 4byte a,b,c,\0 Code (R) - 8바이트 소모

*cstring 변수를 통해서 값을 변경하게 된다면

실제 연결되어 있는 문자열의 위치는 Code영역이라서

수정할 수 없기 때문에 에러가 발생하게 된다.


'소프트웨어 > Linux' 카테고리의 다른 글

[파일 입출력] 고수준, 저수준  (0) 2011.07.28
오브젝트 파일 형식 (Object File Formats)  (0) 2011.07.09
kernel  (0) 2011.06.15
[MAC OSX] port 명령어  (0) 2011.05.21
USB util 컴파일하기  (0) 2011.05.21
Posted by sinpk