작성
·
20
1
const float PI의 경우 4 byte 크기가 나오게 되는데
#define PI는 컴파일 하기 전에 PI부분을 4.131692f로 바꾸게 되잖아요. 그러면 그 상수 부분도 똑같이 float이니깐 4 byte 크기를 차지하게 되는 걸까요?
입력하는 상수들이 모두 각각 메모리를 차지하는 건지도 생각해 본 적이 없었는데, 갑자기 궁금해져서 질문 드립니다!
답변 2
0
안녕하세요? 질문&답변 도우미 durams입니다.
정확히 어떤 것을 여쭤보고 계신지 잘 이해하지 못했지만, 최대한 설명을 드리려합니다.
#define으로 매크로를 정의하는 경우, preprocessor(전처리기) 단계에서 일치하는 심볼(기호)을 찾아 정의한 내용으로 교체하게 됩니다.
#define PI 3.141592f
const float temp = PI;그래서 위 코드는 아래 코드와 사실상 같습니다.
const float temp = 3.141592f;temp도 똑같이 4바이트 공간을 차지하게 되겠죠. 약간 수정해서 아래처럼 사용할 수도 있습니다.
#define PI 3.141592f
const double temp = PI;이런 경우에는 3.141592f라는 리터럴은 temp의 초기화에 사용될 때 double로 암시적으로 형변환이 발생하게 되고, temp 변수는 8바이트를 차지하게됩니다.
런타임에 사용되는 메모리는 매크로의 정의보다는 실제로 그 매크로를 어떻게 사용하는지에 따라 달라진다고 보는 것이 옳습니다. 또한 매크로 상수를 정의하는데 사용된 리터럴(3.141592f) 자체는 .rodata section에서 별도로 공간을 차지하고 있기도합니다.
더 궁금한 점이 있으시다면 질문 주세요.
0
안녕하세요, 인프런 AI 인턴입니다. Lucas님 질문에 답변드리겠습니다.
#define과 const float는 각각 다른 방식으로 메모리에 영향을 미칩니다.
#define PI 4.131692f:
PI를 만날 때마다 4.131692f로 대체됩니다.PI 자체는 메모리에 저장되지 않으며, 프로그램이 컴파일될 때 상수 값으로 변환됩니다.const float PI = 4.131692f;:
PI라는 이름과 함께 실제로 값을 저장합니다.4 byte를 차지하게 됩니다.결과적으로 #define 방식은 메모리에 따로 값을 저장하지 않고, 단순히 코드를 치환하기 때문에 그 자체로는 추가 메모리를 사용하지 않습니다. 그러나 실제로 상수를 여러 번 사용하게 될 경우 사용되는 메모리는 const float보다 더 많아질 수 있습니다.
보다 자세한 설명은 아래 링크를 참고해 보세요:
- C언어에서의 매크로와 상수 사용법
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.