마농의 개발 일지

CS50 5강 메모리 본문

CS

CS50 5강 메모리

마농.. 2022. 7. 5. 19:45

16진법 : Hexadecimal

"0x" 붙여서 16진법 표기법임을 표시.

 

& : '~의 주소' 연산자

%p : 메모리 주소의 형식 지정자. 포인터값

 

메모리의 주소는 16진법으로 되어있음.

 

* : '~주소를 찾아가' 연산자


1바이트는 8비트로 되어 있음.

비트란 0,1 값을 가지는 트랜지스터.

 

int 변수 n 에 값 50을 저장한다고 하였을 때,

4바이트만큼의 메모리를 임의적으로 할당하여 그 변수를 'n'이라고 이름을 붙임.

그 안에 50의 이진법에 해당하는 00110010 이 저장됨.

이곳의 주소는 16진법이 될 것임.


int * : int를 가리키는 포인터 자료형

 ex)

int n = 50;

int *p = &n;

 

포인터는 추상화에 사용됨.

개념적으로 한 변수가 다른 변수를 가리키는 것.

정교한 자료형 제작 및 데이터 관리 알고리즘의 기초가 되는 개념.

 

현대 컴퓨터는 64비트짜리 포인터 사용.


사실 문자열은 존재하지 않는다.

 

string s 라고 하였을 때,

문자열의 첫 글자를 가리키는 주소가 저장되는 것.

s는 포인터임. (널 종단 문자가 그래서 중요함)

 

<cs50.h>에 

typedef char *string 

가 들어있는 것.

 

 


문자열 비교 

 

그래서 두 문자열 비교할 때 자칫하면 '주소'를 비교하는 것으로 됨.

 

char *s = get_string("i: "); 라고 하였을 때,

get_string 함수는 

입력받은 문자 크기만큼을 메모리 임의 공간에 저장하고

첫 글자의 주소를 반환함.


문자열 복사

 

메모리 할당 함수 malloc() (stdlib.h 추가 필요)

 

char *s = get_string("s:  ");

char *t  = malloc(strlen(s) +1);   // null 종단 문자까지 복사해야 하기 때문에 입력 문자열 길이보다 1 큰 값을 할당함)

 

이렇게 새롭게 할당된 메모리에 루프를 이용하여 각 문자(char) 값을 복사하는 것.

 

이 기능을 구현한 함수가 strcpy()


메모리 할당과 해제

 

malloc 또한 할당한 메모리의 첫 바이트 주소를 반환함. 포인터를 넘겨주는 것.

 

malloc 메모리 할당 함수

free 메모리 해제 함수 : 할당되었던 메모리를 다시 반환함.

 

메모리 반환이 필요한 이유 : 프로그램이 더 많은 메모리를 사용할 수 있게 하기 위함.

프로그램이 메모리 할당만 하고 해제하지 않으면 메모리 부족하다고 에러메시지 뜨는 거임.

=> 프로그램 및 컴퓨터의 메모리가 계속 소요되는 것.

=> 따라서 사용하지 않는 메모리는 해제하는 것이 좋음.

 

valgrind : 메모리 할당과 해제 디버깅 도구

 ex) (터미널 창) valgrind ./copy

                         help50 valgrind ./copy


메모리 교환, 스택, 힙 

machine code
globals
heap

stack

1. machine code : clang 이 컴파일한 0과1의 값

2. globals : 전역 변수

3. heap :  메모리를 할당받을 수 있음.  malloc 호출하면 메모리를 이 영역에서 가져옴.

아래로 자람.

4. stack : 함수가 호출될 때 지역 변수, 인자가 쌓이는 공간.

 


파일 쓰기

 

heap overflow :  메모리를 지속적으로 할당하다보면 넘쳐서 메모리 속 다른 내용을 덮어씀.

stack overflow : 자기 자신을 계속 호출하는 버그가 있는 프로그램 실행하면 스택이 넘침.

 

제한된 메모리의 한계.

 

fopen 함수 : 파일을 FILE이라는 자료형으로 불러올 수 있음

 

fopen(파일의 이름,  모드)

- 파일의 이름 :  ex) "phonebook.csv"

- 모드 : "r" (읽기), "w" (쓰기), "a" (덧붙이기

 

fprintf : 파일에 직접 내용을 작성 함수.

fclose : 파일 작업 종료 함수

 


 

'CS' 카테고리의 다른 글

컴퓨터 구조 입문 - CPU  (0) 2022.07.08
32bit 컴퓨터의 메모리가 4GB가 되는 이유  (2) 2022.07.06
CS50강 6강 자료구조  (0) 2022.07.06