C언어에서 두손 두발 들게 하는 포인터란 아이는....어렵다....
이내용을 정리하는 이유도 내가 좀더 남에게 설명함으로써
나 자신이 더 확실히 이해하기 위해서이다.
자바를 공부하다 언매이지드 랭귀지를 공부하고싶어 C, C++를 다시 공부한다.
어떤 언어를 공부하더라고 메모리 구조는 간략히 알고있어야한다고 생각된다.
물론 이렇게 정리하고 올리는 이유도 내가 공부하기 위해서이다....
모든 프로그램들은 OS로부터 자신이 사용할 영토를 할당받는다.
A라는 프로그램이 자신이 구동하기 위해서는
OS의 메모리 공간이 A 프로그램의 실행가능 한 사이즈만큼 여유공가닝 있어야한다.
그렇게 공간을 확보한 A 프로그램은 아래 예시와 같은 공간을 할당받는다.
* 참고로 실제 메모리는 아래와 같이 할당되지 않는다.
해당 내용은 OS를 공부하면 단편화, 가상 메모리, 페이징, 세그먼테이션 등 을 참조하시길....
Stack : 지역변수, 함수 매개변수, Return 주소. 등 임시로 사용되는 영역, 매개변수와 리턴값은 함수 호출시 생성함수 수행, 종료시 반환된다. (컴파일시 결정)
heap : 동적 할당, 객체에 대한 영역 (런타임중 결정)
DATA {
- bss : 전역으로 선언된 초기화 되지 않은 데이터
- data : 전역변수, 정적변수(static), 배열, 구조체 등....
}
text(code) : Application 실행시킬 바이너리 코드가 올라감. (코드, 함수, 제어문 등)
지금 이 메모리를 잘기억해야한다.
다른 언어에서는 메모리를 디테일하게 신경안쓰면 안되지만 C언어 만큼 신경안써도된다. (C++도 제외...)
우리집엔 고양이?(돼지)가 있다.
초반에 레이저포인터로 자주 놀아줬는데 이포인터!
(고양이 키운다고 자랑하고싶어서 밑밥깜....)
특정 위치를 가르키는 것이다.
비유하자면 건물 주차장이 있다.
나는 주차를 해놓고 쇼핑을하고 돌아와 차가 어디에 있는 지 안보인다.
그떄 차키로 차를 열면 소리가 난다.
이런 역할이 포인터 = 차키, 값 = 차, 주차된 공간 = 메모리주소
#include <stdio.h>
int main() {
int a = 10;
int* ptr;
ptr = &a;
printf("a value is : %d\n", a); //10
printf("a address is : %p\n", &a); //0x7fffffffe97c
printf("ptr pointer : %d\n", *ptr); //10
printf("ptr value is : %p\n", ptr); //0x7fffffffe97c
printf("ptr address is : %p\n", &ptr); //0x7fffffffe970
return 0;
}
Result >
a value is : 10
a address is : 0x7fffffffe97c
ptr pointer : 10
ptr value is : 0x7fffffffe97c
ptr address is : 0x7fffffffe970
1. int a =10;을 초기화함.
2. int* ptr; 이라는 포인터 변수 선언.
3. ptr변수에 &a 주소를 전달한다. &참조연산자
위 결과와 같이 동작한다.
littele Endian 방식이라 1byte단위로 거꾸로 저장되어있다.
<------a 변수의 0a ==10 이다.
위와 같이 메모리의 위치를 직접 접근 가능한 언어가 C언어이다.
Pointer의 다양한 사용법에 대해 나중에 다시 올리겠다.!
[C언어]포인터 배열(Pointer Array) (0) | 2022.03.01 |
---|---|
[C언어]함수포인터(Function Pointer). (0) | 2022.02.27 |
댓글 영역