작성
·
283
1
구조체 compound literal이 메모리를 차지하고 있는 l-value라면 그냥 구조체를 선언하고 대입하는 것과 메모리적으로 차이가 없어 보입니다. 그럼에도 불구하고 이 용법을 쓰는 이유는 단지 타이핑을 적게 하기 때문인가요?
그리고 복합 리터럴이 메모리의 어느 공간에 저장이 되나요?
stack인가요 아니면 code segment인가요?
답변 1
2
좋은 질문 감사드립니다 :)
compound literal은 struct 뿐 아니라 아래와 같이 scalar, array, union type 등에서도 사용될 수 있습니다.
int i = ++(int) { 1 };
const float *pc = (const float []){1e0, 1e1, 1e2};
int *p = (int[]){2, 4};
요는, "struct 표기를 대체하기 위해" 사용되기보다는, 보통 "이름없는 object를 내가 원하는 타입으로 임시 생성하고 싶을 때" 사용하지요.
compound literal이 어떤 세그먼트에 저장되는지는 compound literal을 선언하는 방식에 따라 다릅니다.
보통, 함수 내부에서 정의되었을 경우 여느 리터럴과 마찬가지로 stack segment에 생성됩니다. 하지만 compound literal이 함수 외부에서 정의되었을 경우 (static) 이는 data segment에 생성됩니다.
참고하시면 좋은 링크도 함께 첨부해드립니다.
https://gcc.gnu.org/onlinedocs/gcc/Compound-Literals.html
답변이 도움이 되셨길 바랍니다 :)
감사합니다.