본문 바로가기
Computer Science

메모리 정리

by st-og 2023. 6. 18.

포인터

변수가 저장된 메모리의 주소가 저장되어 있음

 

&변수명 : 변수의 메모리 주소가 들어 있음

int n=50

int *p =  &n   --> n의 메모리 주소를 p에 저장 하는 구문

 (메모리 주소를 변수에 넣으려면 무조건 *이 들어가야 함)

print(p) --> n의 메모리 주소가 프린트 됨

print(*p) --> n의 값이 출력이 됨 (50)

 

문자열

문자열은 char의 집합의 개념

 

str == char * (c는 str이 없음)

 

포인터는 문자열의 앞글자의 주소만 알고 있음

ex) char *p='hello';

p=='h'가 저장되어 있는 메모리 주소

 

****끝냄을 알리는 \0이 마지막에 들어가 있음****

ex)char *s= "hello";

--> 메모리 내부 --> ['h','e','l','l','o',\0]

 

문자열전체로 비교는 불가능 함 (한글자씩 비교 해야함)ex) char *p='hello';char *x='hello'; 일때 p와 x를 비교하면 false가 나옴(이유) p와 x에는 hello가 아니라 각 값이 들어있는 메모리 주소가 담겨 있기 때문

 

메모리 할당 malloc()

메모리 해제 free()  (안해주면 메모리가 계속해서 차게 되고 꽉차면 오류 발생)

 

메모리 교환

메모리 안에는 데이터를 저장하는 구역이 나눠져있음

힙, 스택 ,,,

힙: malloc으로 할당된 메모리 데이터가 저장됨

스택: 프로그램 내의 함수와 관련된 것들이 저장됨

 

int a=15;

b=a

b에 a의 값이 복사가 되는것 (*** 메모리 주소가 복사가 되는것이 아니기 때문에 b의 값을 바꿔도 a는 그대로 임)