계엄령이 선포를 바라보며 작성하는 til
박근혜 탄핵 가결되는 뉴스를 실시간으로 보며 야작했던 대학생활이 떠올라요
스택영역 : 함수의 호출과 관계있는 변수가 저장되는 영역
스택프레임에서 높은 주소에서 낮은 주소로 스택이 저장됨
[매개변수 -> 반환주소값 -> 지역변수] 순으로 함수에 대한 변수를 저장
32bit 64bit 차이 : 레지스터 크기 차이
cpu안에 있는 레지스터
레지스터 사이즈가 클수록 가져올수있는 주소 사이즈가 큼
메모리 최적화 -> 힙에서 저장하는 영역에 대하여 최적화함을 의미
스택오버플로우란
함수에서 사용하는 변수들을 저장하는 스택 영역에서 지정한 사이즈의 영역보다 더 크게 메모리를 사용할경우 발생하는 에러
[궁금증!]
Q1. 선언되지 않은 상수는 어디에 저장될까
아래는 게임회사 코테에서 물어봤던 내용인데 해당 함수가 어떻게 동작하는지를 설명해야했다
int main() {
cout << "Hello World!";
// cout : iostream 헤더안에 표준입출력에서 출력 기능을 하는 객체
// << : 비트 이동 연산자로 "Hello World!"라는 string 변수를 출력 스트림으로 이동시킴
}
이 함수에 대해 메모리 영역까지 설명할수있었다면 좋지않을까? 싶어서 다시 정리해본다
https://blog.naver.com/songsite123/222971827760
메모리 구조
stack : 함수 호출시 변수를 저장영역 (매개변수, 반환주소, 지역변수)
heap : 동적 메모리 할당 영역
bss segment : 초기화되지않은 전역변수, 정적변수 저장영역
data segment : 초기화된 전역변수, 정적변수 저장영역
text(code) segment : 코드와 상수 데이터 저장영역
A1. 위내용에 따르면 int main함수가 실행되면 "Hello World!" 라는 문자리터럴이 data segment 영역에 로드가 되고 << 라는 비트 이동 연산자에 의해 cout 이라는 출력 스트림으로 전달이 되며 출력이 됩니다.
Q2. 함수의 매개변수로 string이있으면 string이라는 변수타입은 힙에저장되어야하고 함수의 매개변수는 stack에 저장되어야하는데 이경우에는 어느 저장 영역이 맞는가?
void PrintMessage(string message) {
cout << message;
}
string myString = "Hello, World!";
PrintMessage(myString);
A2.매개변수와 데이터가 구분되어서 저장됩니다!
매개변수 (데이터를 가리키는 참조) message 는 stack에 저장되고
myString 변수는 stack에 저장되고 "Hello, World!" 라는 문자열은 힙에 저장되고 해당 주소를 myString이 참조합니다.
요구안이 가결되었으니까 자러가용
'공부' 카테고리의 다른 글
gitbook-cli 설치 시 TypeError: cb.apply is not a function 에러 해결 (0) | 2024.12.12 |
---|---|
[TIL][C++, 게임 프로그래밍] 241204 3. 디버깅 (0) | 2024.12.05 |
[TIL][C++, 게임 프로그래밍] 241202 1. 프로그래밍 개론 (0) | 2024.12.03 |
[알고리즘] 백준 9017 크로스 컨트리 c++ 예외처리 (0) | 2024.10.26 |
[Play Console] 앱이 Android 14(API 수준 34) 이상을 타겟팅 해결하기 (0) | 2024.10.26 |
댓글