코드영역 - 기계어 + 상수(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 |