구글에 검색하면서 공부하는데 몰?루겠음
초기화된 전역, 정적 변수는 data 세그먼트에 할당되고 초기화되지 않은 전역, 정적 변수는 bss 세그먼트에 할당된다고 하는데
그럼 프로그램 실행하면 일단 bss 세그먼트에 있다가 해당 전역, 정적 변수가 정의되거나 호출되는 시점에 data 세그먼트로 이동하는거임??
글고 컴파일 단계에서 메모리 할당된다고 하는 글도 봤는데
일단 실행 시켜야하는거니까 런타임에 메모리 할당 되는게 맞는거 아니야?
구글에 검색하면서 공부하는데 몰?루겠음
초기화된 전역, 정적 변수는 data 세그먼트에 할당되고 초기화되지 않은 전역, 정적 변수는 bss 세그먼트에 할당된다고 하는데
그럼 프로그램 실행하면 일단 bss 세그먼트에 있다가 해당 전역, 정적 변수가 정의되거나 호출되는 시점에 data 세그먼트로 이동하는거임??
글고 컴파일 단계에서 메모리 할당된다고 하는 글도 봤는데
일단 실행 시켜야하는거니까 런타임에 메모리 할당 되는게 맞는거 아니야?
bss도 데이터 영역이지, 어차피 0으로 초기화할 변수들이기 때문에 파일에 값이 안 들어가 있는 것일껄?
bss 세그먼트가 data 세그먼트의 일부분이고 전역, 정적 변수가 어차피 0으로 초기화되기 때문에 소스 파일에서 값을 안넣어놨다는 얘기인거야?? 그럼 static int a = 100;으로 선언해둘 때만 bss 세그먼트를 거치지 않는다는 얘기인건가 복잡하넹
bss에 할당된 건 이후에 data로 이동하지 않음. 정적 변수는 선언됐을 때, 컴퍼일타임에 메모리가 이미 정해지고 런타임에 바뀌지도 않음. 그래서 C에선 static initializer가 컴파일타임에 결정되는 constant expression 밖에 될 수 없다는 제약이 있음
C++에선 이 제약이 없고 main 함수 이후에 초기화가 됨
선생님의 가르침에 부랄을 탁 치고 갑니다 ㄳㄳ
bss.. 흠흠
해당 댓글은 삭제되었습니다.