Search

코드, BSS, 데이터 세그먼트

Class
메모리
Type
메모리 구조
Created
2023/12/29 01:39
updated
2024/08/07 06:28
날짜

코드, BSS, 데이터 세그먼트

스택과 힙 메모리 외에도 코드, BSS, 데이터 세그먼트가 메모리를 차지하는 부분입니다.
해당 부분은 스택이나 힙 메모리에 비해 큰 영역을 차지하지 않습니다. 따라서 실제 현업에서의 최적화에서는 이 부분을 별로 고려하지 않습니다. 따라서 이 부분이 어떤 방식으로 데이터가 쌓이는지만 이해하면 됩니다.

코드 세그먼트

용도 : 실행 가능한 코드를 저장합니다.
특징 : 이 영역의 메모리는 읽기 전용이며, 프로그램 코드가 저장됩니다.
중요성 : 프로그램의 실제 작동 지침이 저장되는 곳으로, 프로그램의 기능을 실행하는 데 필수적입니다.
크기 영향 요소 : 전체 프로그램의 코드 양, 함수의 수, 실행 로직의 복잡성. 작은 유틸리티 프로그램은 몇 킬로바이트(KB) 크기일 수 있지만, 대규모 애플리케이션의 경우 메가바이트(MB) 이상일 수도 있습니다.

데이터 세그먼트

용도 : 초기화된 정적 변수를 저장합니다.
특징 : 프로그램 시작 시 초기화되며, 프로그램 실행 동안 지속됩니다.
중요성 : 프로그램 전반에 걸쳐 지속적으로 접근해야 하는 데이터를 저장합니다.
크기 영향 요소 : 선언된 전역 및 정적 변수의 수와 유형(예: 정수, 문자열, 배열 등) 데이터 세그먼트의 크기는 이 변수들에 할당된 메모리의 총합에 의해 결정됩니다.
C#에서는 데이터 세그먼트가 없고 고정 힙이라는 메모리를 사용합니다.

BSS 세그먼트

용도 : 초기화되지 않은 정적 변수를 위한 공간입니다.
특징 : 프로그램 시작 시 기본값으로 초기화됩니다.
중요성 : 데이터 세그먼트와 유사하지만, 초기값을 지정하지 않은 변수들을 위한 공간을 제공합니다.
크기 영향 요소 : BSS 세그먼트 역시 데이터 세그먼트와 유사하게, 선언된 변수의 수와 유형에 의해 크기가 결정됩니다.
C#에서는 BSS 세그먼트가 없고 고정 힙이라는 메모리를 사용합니다.
C#과 같은 클래스 기반 언어에서는 전역 변수와 정적 변수를 비슷한 의미로 사용하는 경우가 많습니다. 대체로 클래스의 static 변수가 그 대상이 됩니다. 실제로 전역 변수의 의미는 약간 다르지만, C# 관련 인터넷 자료에서는 이 두 용어를 거의 동일하게 사용하는 경우가 많습니다. 단, static 변수는 엄밀히 말하면 전역 변수에 속할 수 있는 정적 변수라 하는게 맡습니다. (다른 어셈블리에서 선언된 정적 변수라면, 접근이 불가능합니다.) 전역 변수 : 프로그램 어디에서나 접근할 수 있는 변수 정적 변수 : 클래스 레벨에서 선언되며, 해당 클래스의 모든 인스턴스가 공유