티스토리 뷰
[1] 메모리 주소
- 메모리 주소(&)는 16진수로 표현
- 컴퓨터는 8개의 비트가 모인 바이트 단위로 정보를 표현하는데, 2개의 16진수는 1byte의 2진수로 벼환되기 때문에 정보를 표현하기 매우 유용하다.
ex. 01000001 => 0100 = 4 | 0001= 1 => 0x41
* 2진법
128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1
1비트*8개 = 8비트 = 1바이트
1000바이트 = 1KB < MB < GB < TB
* ACII, 유니코드
- 아스키코드 : A = 65, 0=48, 1=49, 8비트만 사용
- 유니코드 : 8,16,24,32비트 사용 => 더 많은 패턴 사용 가능
-RGB(발강,초록,파랑) 하나의 픽셀의 색에는 이 3가지 값이 들어감
*생각해보기) CS50을 2진법으로?
아스키코드 | 10진법 | 2진법 |
CS50 | 67 83 53 48 | 1000011 1010011 110101 110000 |
*트랜지스터 : 컴퓨터 속에 있는 작은 스위치(0과 1, 1에 각각 조금의 전기를 저장)를 물리적으로 이용해서 정보를 표현하고 값을 저장[CS50-2019]
[2] 문자열 : 문자의 배열, 가장 마지막은 \0, 즉 0으로 이루어진 바이트로 문자의 끝을 표시
- 문자열은 문자열을 가리키는 포인터(char *로 표현)이다. 더 상세히는 문자열의 가장 첫번째 문자의 주소를 가리킴.
- 따라서 문자열을 복사할 때는 주소값이 복사 될 수 있으므로 메모리를 할당한 후 값을 복사해야 한다.
(1) malloc
int main(void) { char *s = get_String("s: "); char *t = malloc(strlen(s))+1); // 메모리를 할당한 후 해당 주소를 반환(널 종단문자 \0 때문에 +1 해줌) for (int i=0, n=strlen(s); i<n+1; i++) { t[i] = s[i]; // 문자열의 각 원소를 복사 } t[0] = toupper(t[0])); print("s: %s\n", s); print("t: %s\n", t); free(t); // 메모리 누수 방지를 위해 할당한 메모리 해제 } |
(2) 메모리 교환, 스택, 힙
machine code | clang이 컴파일한 0과 1의 값 |
globals | 전역변수 |
heap (melloc으로 할당된 메모리의 데이터 저장) |
melloc을 호출하면 메모리를 이 영역에서 가져옴 |
↓ | * melloc을 계속 생성 시키면 heap overflow →메모리 덮어씀 |
메모리 너무 많이 써서 오류발생 : 버퍼오버플로우 ex. 인덱스 9까지 있는데 인덱스 10호출 |
|
↑ | * 함수를 계속 호출하면 stack overflow 발생 가능 |
stack (프로그램 내의 함수 관련 저장) |
swap()같은 함수들, 함수들 안의 변수 a,b |
main함수, 함수 안의 지역변수 |
※ 출처 : CS50 - 2019 [네이버부스트코스] https://www.boostcourse.org/cs112/lecture/119038/?isDesc=false
'AI' 카테고리의 다른 글
[CS50-2019] C언어 총정리-(10) 자료구조 (0) | 2024.05.26 |
---|---|
[CS50-2019] C언어 총 정리(8) 알고리즘 (0) | 2024.05.25 |
- Total
- Today
- Yesterday
- 오블완
- 운동
- 아침
- Python
- 기초
- ChatGPT
- Ai
- SQL
- 미라클모닝
- 티스토리챌린지
- 영어회화
- 프로그래머스
- opic
- 30분
- 습관
- 아침운동
- 다이어트
- 오픽
- 줄넘기
- 고득점 Kit
- 갓생
- 경제
- 루틴
- C언어
- 스크랩
- IH
- 실기
- 뉴스
- 빅데이터 분석기사
- llm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |