프로그램 메모리구조 5가지만 기억하면 돼.
코드, 데이터, BSS, 힙, 스택

요약
실행파일 (.exe) 는 코드 영역과 데이터 영역으로 구성되는거고 (물론 bss, 힙, 스택 영역, 크기를 같이 가지고 있지 스케에에에엥터..)
이게 실행될때, 코드 데이터영역은 하드디스크에서 메모리영역으로 카피되고, 카피된 코드가 실행되면서 메모리영역에서 BSS, 힙 스택이 생겨난다.
코드는 말그래도 코드야. 프로그램을 코딩하면 그게 코드고 프로그램 메모리영역의 코드영역으로 들어가는거야.
이말은? 변하지 않는 영역인거고, 프로그램을 컴파일하고 나면 나오는 실행파일에 (쉽게 .exe)포함되어 있는거지.
그 다음은 데이터(Data), BSS
초기화된 전역변수 , 스태틱변수는 Data 영역으로.
초기화되지 않은 전역변수, 스태택변수는 BSS 영역으로.
그럼 궁금해야해. 왜 그냥 하나로 영역을 만들면 되지 굳이 초기화된거, 초기화되지 않은거로 구분할까.
왜? 실행파일때문에 그런거지.
초기화된 변수들은 실행파일 어딘가에 공간이 있고 값이 저장되어야 하기때문인거고 (Data segment)
초기화되지않은 변수는 실행타임에 ( .exe 를 누르고 나서) 나타나면 되는거니까 둘을 구분해 놓은거지. => 실행파일 사이즈 절약!!!!!
(즉 쉽게말하면 초기화된 변수는 어떤값 (예를들어 3, 4,5 등등) 을 가지고 있어야 하니까 실행파일에 기록 되어 있어야 하는거고,
초기화안된건 어차피 다 0 인거라, 값 저장 필요없이 공간만 잡아놓으면 되는거지. )
그 다음이 이제 프로그램이 실행될때 필요한 힙하고 스택인건데
스택은 보통 함수콜 (스택 프레임, 뭐..... 지역변수 이런것들) 에 쓰이게 되는거고,
힙은 동적으로 메모리 ( C 같은 경우는 말록함수로 할당할때) 를 할당할때 쓰는거다 이렇게 알면 쉽지?
그럼 여기서 질문.
c 의 경우 함수 안에서 static 키워드로 잡아놓은 변수는 어느영역에 할당될까? (뎃글로 부탁해요)
'소프트웨어 엔지니어 > 일반' 카테고리의 다른 글
| [소프트웨어 엔지니어] 캡슐화 추상화 (1) | 2024.09.17 |
|---|---|
| [소프트웨어 엔지니어] 깊은 복사, 얕은 복사 (0) | 2024.09.17 |
| [소프트웨어 엔지니어] 스탠다드 라이브러리 왜 필요할까. (1) | 2024.08.28 |
| 소프트웨어 뭐지? (소프트웨어 엔지니어가 하는일?) (0) | 2024.08.21 |
| 소프트웨어 이해하기 어려운이유? (0) | 2024.08.21 |