Computer Science
탄탄한 기반 실력을 위한
전공과 이론 지식 모음
Today I Learned!
배웠으면 기록을 해야지
TIL 사진
Flutter 사진
Flutter로 모바일까지
거꾸로캠퍼스 코딩랩 Flutter 앱개발 강사
스파르타코딩클럽 즉문즉답 튜터
카카오테크캠퍼스 3기 학습코치
프로필 사진
박성민
임베디드 세계에
발을 들인 박치기 공룡
임베디드 사진
EMBEDDED SYSTEM
임베디드 SW와 HW, 이론부터 실전까지
ALGORITHM
알고리즘 해결 전략 기록
🎓
중앙대학교 소프트웨어학부
텔레칩스 차량용 임베디드 스쿨 3기
애플 개발자 아카데미 1기
깃허브 사진
GitHub
프로젝트 모아보기
Instagram
인스타그램 사진

TIL

[250818] Day 8 - 알고리즘 재활치료 시작

sm_amoled 2025. 8. 18. 18:19

들어가며

주말간 C언어로 알고리즘 문제를 좀 풀었다. Swift나 Dart 같은 언어를 썼으면 손쉽게 휘리릭 했을 알고리즘이나 자료구조들이 (차라리 C++이라도 썼다면 좀 나았을텐데) 시작부터 구현의 장벽으로 느껴졌다 ㅋㅋㅋ

 

포인터를 주고받고 구조체를 정의하고 초기화하고, 구조체 포인터를 주고받는 코드를 작성하면서 재활치료를 좀 했는데, 나름 잘 풀어지는 것 같으면서도 생각대로 구현하는게 되게 어려웠다.

 

그래도 포인터를 써서 뭔가 자료구조들을 쌓아올리는건 재미있다고 느껴지기도 해서, 고급 알고리즘이나 자료구조들을 찬찬히 공부하기 시작해야할 것 같은 느낌적인 느낌쓰가 든다. 후후

 

오늘의 키워드

BSS가 뭐냐

BSS (Block Started By Symbol)

  • 초기화 안된 전역변수, static 변수가 저장되는 영역
  • 메모리를 효율적으로 사용하기 위해 사용 / 0으로 초기화할 변수들을 위한 별도의 공간
  • BSS에는 어차피 처음에는 0으로 채워지니깐, 크기 정보만 담고있으면 됨.
  • 만약 이걸 stack에 넣는다고 하면, 실행파일에 배열에 대한 정보가 포함되어야함
    ⇒ 배열의 크기가 4MB라고하면, 실행파일의 크기가 4MB가 넘어가야함. 그런데, bss 영역에 넣어주면 이걸 os가 알아서 할당하고 초기화해주기 때문에 런타임 할당을 실행파일의 책임이 아닌 OS의 책임으로 넘길 수 있음 + 실행파일의 크기를 그만큼 줄일 수 있음. (임베디드 저장 공간 아끼기)
  • (딱히 속도 측면에서 중요해서 사용하는건 아님)
높은 주소
┌─────────────┐
│    스택     │ ← 지역변수, 함수 매개변수
├─────────────┤
│      ↓      │
│             │
│      ↑      │
├─────────────┤
│     힙      │ ← 동적 할당 메모리
├─────────────┤
│    BSS      │ ← 초기화되지 않은 전역/정적 변수
├─────────────┤
│   데이터    │ ← 초기화된 전역/정적 변수
├─────────────┤
│   텍스트    │ ← 실행 코드
└─────────────┘
낮은 주소

Const를 다뤘는데

포인터상수, 상수포인터, 상수포인터상수

 

이런 용어들로 치환하는 연습을 좀 해야할 것 같다.

 

코드로 보면 어느정도 알겠는데, 이걸 한국어로 바꿔서 말로 꺼내려고 하니깐 잘 안된다. 영어로 해도 헷갈리긴 매한가지라, 청기백기하듯이 연습을 조금 해봐야할 것 같다.

320x100