답변
아니요, 매크로는 그렇게 작동하지 않습니다.
전 처리기으로 대체됩니다. 컴파일러은 NUMBER
을 볼 수 없습니다. 보이는 모든 문자는 10
입니다.
이와 관련하여 C 및 C++은 동일합니다.
매크로에 할당 된 메모리가 없습니다. 코드를 컴파일 할 때 매크로는 사용되는 모든 장소에서 기계적으로 그 값으로 대체됩니다.
이 정의는 프로그램에 메모리를 할당하지 않습니다.
그냥 전 처리기 (컴파일러의 일부)에 NUMBER
의 토큰 인스턴스를 대체하여 10
으로 바꾸라고 알려줍니다.
아마 전처리기에 일부 바이트를 할당합니다. 사전 컴파일 단계에서 - -
자체로 #define
가 메모리를 차지하지 않고, 무슨 일 컴파일러입니다 귀하의 경우, 정의와 코드 번호의 모든 항목을 대체 (10)
없음, 매크로는 메모리를 할당하지 않습니다.
이 문은 변수 할당과 같지 않으므로 메모리는 할당되지 않습니다. 사전 처리기은 컴파일 전에 작동합니다.
NUMBER
은 pre-processing
단계에만 관련이 있으며 런타임에 ID가 없습니다. 전처리 과정에서 NUMBER
의 모든 인스턴스는 10으로 대체됩니다. 따라서 10은 정수 리터럴 (컴파일 타임)이기 때문에 런타임시 메모리 요구 사항이 없습니다.
link을 참조하십시오.
아니요, 일반적으로 #define
지시문은 이 아니므로 메모리를 할당하십시오.
자세히 말하면, #define
은 교체 지시문입니다. 전처리 단계에서 텍스트로 대체됩니다.
그래서,
#define NUMBER 10
.
.
.
if (val == NUMBER)
같은 텍스트 코드는 전처리 후
if (val == 10)
것 같습니다. 따라서 #define
으로 정의 된 MACRO 대체는 별도의 메모리를 사용하지 않습니다. FWIW, 대체 (리터럴) 값은 코드 세그먼트에서 보통 자리를 차지합니다 (, 직접 litreal 값을 사용하여 나중에 형식을 작성한 경우와 같음, MCARO가없는 경우).
관련, C11, 장 §5.1.1.2/P4에서 번역 단계
전처리 지시문이 실행은 매크로 호출은 확장되고, _Pragma 단항 연산자 표현식이 실행됩니다. [...]
- 1. retain은 RAM에 메모리를 할당합니까?
- 2. 서비스가 많은 메모리를 할당합니까?
- 3. 어디에서 프로그램이 메모리를 할당합니까?
- 4. malloc은 실제로 얼마만큼의 메모리를 할당합니까?
- 5. 큰 배열이 어떻게 메모리를 할당합니까?
- 6. 컴파일러는 어떻게이 구조체에 메모리를 할당합니까?
- 7. Java VM은 어떻게 메모리를 할당합니까?
- 8. 자바 스크립트는 어떻게 메모리를 할당합니까?
- 9. 어떻게 그리고 어디에서 메모리를 할당합니까?
- 10. 순차적 '새'연산자가 인접한 메모리를 할당합니까?
- 11. 어떻게 메모리를 할당하고 재 할당합니까?
- 12. C#의 선언이 메모리를 할당합니까 아니면 메모리를 할당하는 새로운 연산자입니까?
- 13. 이미 할당 된 변수에 메모리를 할당합니까?
- 14. 파생 클래스가 멤버 변수에 메모리를 할당합니까?
- 15. 우리는 어떻게 char을 반환하기위한 메모리를 할당합니까 **
- 16. 파이썬 인터프리터는 어떻게 다른 방법으로 메모리를 할당합니까?
- 17. 얼마나 많은 메모리를 UIImageView 320x480에 할당합니까?
- 18. A = A + B가 새 메모리를 할당합니까?
- 19. malloc은 0에서 양의 무한대까지 메모리를 할당합니까?
- 20. Eigen의 반복 솔버는 매 반복마다 메모리를 할당합니까?
- 21. glBufferData는 실제로 크기에 따라 메모리를 할당합니까?
- 22. 왜 BitmapRegionDecoder가 많은 양의 메모리를 할당합니까?
- 23. C++ new/new [], 어떻게 메모리를 할당합니까?
- 24. 배열을 통한 반복을위한 Java 구문은 메모리를 할당합니까?
- 25. numa_alloc_onnode()는 메모리를 더 많이 할당합니까?
- 26. C는 상수 문자열에 메모리를 어떻게 할당합니까?
- 27. 디바이스 메모리를 CUDA의 포인터 배열에 어떻게 할당합니까?
- 28. 왜이 패턴을 따라 Perl이 메모리를 재 할당합니까?
- 29. 이 함수 내에서 메모리를 어떻게 할당합니까?
- 30. 공유 메모리에서 동적 메모리를 어떻게 할당합니까?
출처 : https://gcc.gnu.org/onlinedocs/cpp/Object-like-Macros.html#Object-like-Macros. _ "객체와 유사한 매크로는 코드 조각으로 대체 될 간단한 식별자입니다 ... 그러면 C 전처리 기가 매크로를 인식하고 확장합니다 ... C 컴파일러는"토큰 "을 작성한 경우와 동일한 토큰을 보게됩니다. _ –
'NUMBER '는 (컴파일러의 힙에서) 컴파일 타임에 동적 메모리를 할당합니다. 컴파일 된 프로그램에는 할당이 없습니다. 적어도 매크로는 아닙니다. – i486
글쎄요, 메모리를 '.text' ([code segment] (https://en.wikipedia.org/wiki/Code_segment)) 섹션에 채워 넣으면됩니다. ;) 매번 코드에 사용됩니다. – LPs