• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

11.2강 19:43 질문이 있습니다.

23.12.22 20:14 작성 조회수 127

2

공부한 내용을 테스트해보려고 다음 코드를 작성했습니다.

#include <stdio.h>
#include <stdlib.h>

int var_global_initialized = 1;
int var_global_uninitialized;

void func_test();

int main(void)
{

	// 값이 저장되는 메모리 영역과 그 주소

	// Code 영역
	printf("%llu [Code]\n", (unsigned long long)"I am a String.");

	// Data 영역
	printf("%llu [Data]\n", (unsigned long long)&var_global_initialized);

	// BSS 영역
	printf("%llu [BSS]\n", (unsigned long long)&var_global_uninitialized);

	// Heap 영역
	char* var_dynamic = (char*)malloc(sizeof(char) * 100);
	printf("%llu [Heap]\n", (unsigned long long)var_dynamic);

	// Stack 영역
	func_test();

	return 0;
}

void func_test() {
	int var_local = 0;
	printf("%llu [Stack]\n", (unsigned long long)&var_local);
};

 

메모리 영역 별 간격이 너무 작게 출력되는데 올바르게 작성한게 맞을까요..??

 

참조

온라인 컴파일러 링크

문자열 리터럴이 저장되는 메모리 영역 링크

메모리 영역별 예제 코드 링크

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2023.12.23

안녕하세요, 답변 도우미 Soobak 입니다.

 

각 메모리 영역은 운영체제와 컴파일러의 구현에 따라 할당되며, 특히 다른 프로세스와의 격리를 위해 고유한 주소 공간을 사용합니다.
또한, 실제로는 운영체제와 하드웨어의 보다 복잡한 상호 작용에 의해서 결정됩니다.

따라서, 실제 메모리 주소 간격 보다 시스템의 메모리 정책과 현재 프로세스의 메모리 상태 등의 영향을 고려해야 합니다.

코드 자체는 올바르게 작성하신 것으로 보이기 때문에 메모리 영역 간의 간격에 대해서는 걱정하지 않으셔도 됩니다.

 

 

항상 친절한 답변 감사드립니다!!!!