자문자답 공부

Static / 전역변수 / BSS

Roka_is_back 2024. 2. 28.

https://rokaisback.tistory.com/14

 

1.DLL 학습 및 만들기

 

rokaisback.tistory.com

이거 공부하다가 static과 전역변수의 다른 점을 인지할 수 있었다.

 

정적 변수 : 선언,초기화 한 스코프 내에서만 사용 가능.

전역 변수: cpp 에 초기화 하고, h에서 extern을 통해 다른 파일에도 존재를 알리고 사용할 수 있다.

 

Data 영역과 BSS영역

https://shinluckyarchive.tistory.com/159

수식이나 함수에 의해 초기화 된 경우 BSS 영역으로 간다는 것은 중요할 수 있다.

왜냐하면 실행파일의 크기가 달라지기 때문이다.

아무것도 없을때 39kb

 

bss 영역의 arr가 추가됐을때 39kb
vec 배열을 초기화 한 후 86kb

 

Static 은 본문에서 사용하지 않으면 메모리에 잡히지 않는다.

본문에서 호출함으로써 메모리에 잡힌 모습

우리는 초기화 하지 않은 a2와 b2의 주소가 0a1d400 번대 라는 것을 통해 이 부분이 Bss 영역이라는 것을 유추할 수 있다.

Dynamic Initializer (동적 초기화)

함수를 이용한 초기화

a3는 시작과 동시에 초기화를 했지만 함수를 이용한 초기화이므로 Bss 영역에 올라가는 것을 볼 수 있다.

컴파일 시점에 함수의 리턴 값을 알아 낼 수 없기 때문이라고 한다.

수식을 이용한 초기화

Bss 영역에 잡히는 것을 볼 수 있다.

Constexpr

컴파일 시간 상수를 만드는 키워드이다.

 

상수는 

1.컴파일 시간에 알 수 있는 상수(compile_time constant)

2.컴파일 시간에 알 수 없는 상수 (run_time constant)

 

const는 1과 2 모두 사용 가능.

constexpr는 1번만 가능.

 

constexpr 함수

컴파일 타임에 계산해서 상수를 리턴해주는 함수를 만들 수 있다.

함수에 constexpr를 붙이니 메모리를 보면 b2와 a3가 Data 영역에 잡힌 것을 볼 수 있다.

 

 

아래의 조건만 피하면 오류가 발생하지 않는다.

https://modoocode.com/293

 

씹어먹는 C++ - <16 - 2. constexpr 와 함께라면 컴파일 타임 상수는 문제없어>

constexpr 을 통해 컴파일 타임 상수인 객체를 선언할 수 있다. const 와 constexpr 은 다르다. const 는 컴파일 타임에 상수일 필요가 없다! (const 인 애들 중에서 constexpr 이 있다고 생각하면 된다) constexpr

modoocode.com

https://shinluckyarchive.tistory.com/159

 

SPARC Assembler Memory Map

어셈블러를 수월하기 위해서는 사실 절차적인 면에서, Register Set과 Memory Map에 관한 이해가 가장 필수적이다. 지난번에 Register Set에 대해서는 여러번 언급을 하였고, 이번에는 Memory Map에 대하여

shinluckyarchive.tistory.com

https://stackoverflow.com/questions/610682/do-bss-section-zero-initialized-variables-occupy-space-in-elf-file

 

Do .bss section zero initialized variables occupy space in elf file?

If I understand correctly, the .bss section in ELF files is used to allocate space for zero-initialized variables. Our tool chain produces ELF files, hence my question: does the .bss section actually

stackoverflow.com

 

'자문자답 공부' 카테고리의 다른 글

테셀레이션,지오메트리,한 정점에 다수의 UV 처리.  (0) 2024.05.09
Malloc , New 차이  (0) 2024.03.10
포인터 / 배열  (0) 2024.02.26
Struct와 Class 의 차이  (0) 2024.02.23
Virtual 키워드  (0) 2024.02.21

댓글