인프런 커뮤니티 질문&답변

쉽지않네님의 프로필 이미지
쉽지않네

작성한 질문수

홍정모의 따라하며 배우는 C언어

11.2 메모리 레이아웃과 문자열

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

해결된 질문

작성

·

197

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 입니다.

 

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

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

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

 

 

쉽지않네님의 프로필 이미지
쉽지않네
질문자

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

쉽지않네님의 프로필 이미지
쉽지않네

작성한 질문수

질문하기