inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

독하게 시작하는 C 프로그래밍

중첩 스코프와 식별자 검색 순서

같은 식별자 메모리 저장 위치

해결된 질문

127

taehyun0222

작성한 질문수 3

0

중첩스코프와 식별자 검색 순서 강의의 예제에 중단점 설정하고 nInput들의 메모리 저장위치들을 살펴봤는데, 15를 입력값으로 받았을때 두번째 nInput의 저장위치가

첫번째 nInput 저장위치랑 32바이트씩 일정하게 차이가 나던데 어떤 이유에서인가요 ? (두번째 변수엔 19 저장되게 했습니다)

화면 캡처 2024-10-15 151240.png

 

c 컴퓨터-구조 assembly-language vc++

답변 2

0

널널한 개발자

디버그 모드로 빌드 할 경우 각 지역변수 사이에 일정 수준의 공간이 추가로 들어가는데 이는 캐너리 비트입니다. 지역변수의 경계를 넘어선 입/출력이 일어나는 것을 탐지하기 위한 것입니다. 참고하시기 바랍니다. 😄

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
taehyun0222님의 질문에 대해 답변 드리겠습니다.

중첩 스코프와 식별자 검색 순서 강의에서 사용된 예제 코드에서, nInput 변수의 메모리 위치 차이를 관찰하신 부분은 매우 흥미로운 주제입니다. C 언어에서 변수는 보통 스택 메모리에 저장되며, 함수 호출이나 블록이 중첩되면서 각 변수들은 서로 다른 메모리 공간에 할당됩니다. 이런 배치는 컴파일러가 자동으로 수행하며, 이들이 메모리상에서 어떻게 배치될지는 컴파일러와 사용된 최적화 옵션에 따라 차이가 날 수 있습니다.

관찰하신대로 동일한 이름의 변수(nInput)가 다른 메모리 위치에 저장되는 것은 스코프와 연관이 있습니다. 여기서 스코프란, 특정 변수가 유효한 코드 영역을 의미합니다. 두 변수는 같은 이름을 가지고 있지만, 서로 다른 블록에 존재하므로 컴파일러는 이를 분리하여 메모리에 배치하게 됩니다.

32바이트씩 차이가 나는 이유는 컴파일러가 스택에 변수를 할당할 때 각 변수 및 추가적인 데이터를 저장하기 위해서, 예를 들어, 함수 호출 시의 리턴 주소나 이전 함수의 스택 프레임 포인터 등이 포함될 수 있습니다. 또한, 메모리 패딩을 적용하여 정렬을 맞출 수도 있습니다. 이는 아키텍처에 따라 최적화되며, 빠른 액세스를 보장하기 위한 전략입니다.

관련된 답변 및 설명은 정수형태 변수 메모리상 확인방법 및 단순 대입 관련 문의 에서도 확인하실 수 있습니다. 이 링크에서는 메모리를 다루는 일반적인 컴파일러 동작 및 주소 할당에 대한 개념을 조금 더 상세하게 다루고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

scanf("%d\n") 의미

0

20

1

주소 연산자(&) 간접 지정자(*) 반대 개념

0

33

1

Virtual Memory, Memory, Memory mapping tables

0

51

1

샘플코드 출력 오류 발생 질문드립니다

0

63

2

값의 교환에 사용되는 변수의 위치.

0

88

2

메모리 비교에 관한 질문

0

81

2

문자열 Null

0

63

1

C, C++

0

89

2

문자열 입출력 코드 에러

0

60

2

선생님! 120화 2분 50초 질문입니다.

0

67

1

caller 가 메모리 할당 해제를 할 때의 문제점 질문

0

64

2

단축키 맞는지 여부 문의드립니다.

0

61

2

문자열을 사용하는 이중 포인터에 대하여 질문합니다

0

66

1

char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요

0

78

2

용어 설명 필요

0

57

2

stdin, stdout

0

71

2

필수 실습 (최댓값을 반환하는 함수)

0

93

2

아......ㅠㅠ

0

100

2

버퍼 내 엔터

0

73

1

2진수 뺄셈에서 carry-out

0

112

2

union 식별자는 실무에서 보통 어디에서 사용하나요?

0

80

2

필수실습문제 공부법 (진도 vs 복습)

0

104

2

예제파일 다운로드

0

79

2

Visial Studio Code 를 설치해서 사용해도 수업을 따라가는데 지장이 있나요?

0

120

3