일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 깃허브
- 컴퓨터과학
- vue.js
- vue.js.
- 초보개발자
- 64비트컴퓨터
- 치앙마이살기
- 32비트컴퓨터
- 개발독학
- 레지스터
- 강의노트
- 프로그래머스
- 실력향상
- 얄팍한코딩사전
- cpu작동원리
- 일상
- 얄코
- 태국살이
- 스터디데이
- 일기
- 치앙마이살이
- 태국
- 개발자
- 정의란무엇인가
- 입문
- 취업준비생
- 취준생일상
- 엑사바이트
- 커리어전환
- 치앙마이
- Today
- Total
마농의 개발 일지
CS50 5강 메모리 본문
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 |