들어가며
주말간 C언어로 알고리즘 문제를 좀 풀었다. Swift나 Dart 같은 언어를 썼으면 손쉽게 휘리릭 했을 알고리즘이나 자료구조들이 (차라리 C++이라도 썼다면 좀 나았을텐데) 시작부터 구현의 장벽으로 느껴졌다 ㅋㅋㅋ
포인터를 주고받고 구조체를 정의하고 초기화하고, 구조체 포인터를 주고받는 코드를 작성하면서 재활치료를 좀 했는데, 나름 잘 풀어지는 것 같으면서도 생각대로 구현하는게 되게 어려웠다.
그래도 포인터를 써서 뭔가 자료구조들을 쌓아올리는건 재미있다고 느껴지기도 해서, 고급 알고리즘이나 자료구조들을 찬찬히 공부하기 시작해야할 것 같은 느낌적인 느낌쓰가 든다. 후후
오늘의 키워드
BSS가 뭐냐
BSS (Block Started By Symbol)
- 초기화 안된 전역변수, static 변수가 저장되는 영역
- 메모리를 효율적으로 사용하기 위해 사용 / 0으로 초기화할 변수들을 위한 별도의 공간
- BSS에는 어차피 처음에는 0으로 채워지니깐, 크기 정보만 담고있으면 됨.
- 만약 이걸 stack에 넣는다고 하면, 실행파일에 배열에 대한 정보가 포함되어야함
⇒ 배열의 크기가 4MB라고하면, 실행파일의 크기가 4MB가 넘어가야함. 그런데, bss 영역에 넣어주면 이걸 os가 알아서 할당하고 초기화해주기 때문에 런타임 할당을 실행파일의 책임이 아닌 OS의 책임으로 넘길 수 있음 + 실행파일의 크기를 그만큼 줄일 수 있음. (임베디드 저장 공간 아끼기) - (딱히 속도 측면에서 중요해서 사용하는건 아님)
높은 주소
┌─────────────┐
│ 스택 │ ← 지역변수, 함수 매개변수
├─────────────┤
│ ↓ │
│ │
│ ↑ │
├─────────────┤
│ 힙 │ ← 동적 할당 메모리
├─────────────┤
│ BSS │ ← 초기화되지 않은 전역/정적 변수
├─────────────┤
│ 데이터 │ ← 초기화된 전역/정적 변수
├─────────────┤
│ 텍스트 │ ← 실행 코드
└─────────────┘
낮은 주소
Const를 다뤘는데
포인터상수, 상수포인터, 상수포인터상수
이런 용어들로 치환하는 연습을 좀 해야할 것 같다.
코드로 보면 어느정도 알겠는데, 이걸 한국어로 바꿔서 말로 꺼내려고 하니깐 잘 안된다. 영어로 해도 헷갈리긴 매한가지라, 청기백기하듯이 연습을 조금 해봐야할 것 같다.
320x100
'TIL' 카테고리의 다른 글
| [250820] Day 10 - &&__ ** 별보러가자 (0) | 2025.08.21 |
|---|---|
| [250819] Day 9 - 개인교사 데뷔전 (0) | 2025.08.20 |
| [250814] Day 4 - 포인터지옥 벌써 시작 (7) | 2025.08.15 |
| [250813] Day 3 - 날씨 최고로 좋다~ (3) | 2025.08.13 |
| [250812] Day 2 - 익숙해질듯 한 2일차 (4) | 2025.08.12 |