2012-11-26 1 views
6

필자의 소스 코드에는 올바른 들여 쓰기를 유지하고자하는 욕구 때문에 공백 문자를 제외하고는 똑같은 리터럴 문자열이 많이 있습니다. 컴파일러는 두 바이트 모두에 대해 메모리 공간을 재사용 할 수 있다는 것을 알기에 현명합니까? 단 하나의 문자열을 몇 바이트 만 오프셋하면됩니까?중복 리터럴을 통합 할 때 C 컴파일러가 문자열 중간에 표시됩니까?

+0

일반적인 접미사가있는 리터럴을 말합니까? –

+0

코드 예 – SomeWittyUsername

+2

@Dvorak을 추가하십시오. 예, 그렇다면 하나의 문자열이 다른 문자열의 접미사임을 의미합니다. 전의. "abc"및 "___abc". – cleong

답변

-4

간단한 대답 : 아니요.이 작업을 수행하는 컴파일러에 대해 잘 모릅니다. 이 구현 문자열 상수와 동일하거나 중복 표현으로 일정한 화합물 리터럴 저장소를 공유 할 수

+3

실제 대답이 아니기 때문에이를 언급해야합니다. –

+0

글쎄,이 종류의 문자열 풀링을 수행하는 컴파일러가 있는지 질문하는 것이 좋습니다. 내가 아는 한 사실이 아니야. 그들은 그것을 할 수는 있지만 그렇게하지는 않습니다. 그래서 이것에 대해 다른 의견을 말해야할까요? 그럴만 한 가치가 없다고? – TheBlastOne

+0

안녕하세요! 내가 8 downvotes에 대한 배지를 원한다! 그리고 왜 upvotes? :) – TheBlastOne

1

ISO C99 6.5.2.5의 화합물 리터럴

83).

+0

응? 복합 리터럴은 문자열 리터럴과 아무 관련이 없습니다. 또한 발 노트는 ISO 표준의 표준 텍스트가 아닙니다. – Lundin

+0

실제로 발 노트는 ISO 표준의 규범 텍스트가 아닙니다. ".... 나는 돈이 안된다. 나는 조금 의미가있다. 그래서 나는 대답했다. .. 정보를 주셔서 감사합니다. 어쨌든 그것은 합성어와 문자열 리터럴 모두에 대해 말합니다. – Omkant

+0

@ Lundin : 짧고 간결한 대답으로 생각했습니다 – Omkant

1

짧은 답변 : 아마도.

답변 : 구현에 따라 다릅니다. 일반적으로 C 컴파일러에는 컴파일러가 모든 문자열 리터럴을 ROM에 인접하게 저장할 수있게 해주는 "문자열 풀"또는 이와 유사한 옵티 마이저 기능이 있습니다.

그런 다음 문자열 풀의 내용을 최적화 할 수 있습니다. 두 번 나타나는 동일한 문자열이 거의 최적화 될 것입니다. 대부분의 컴파일러는 하위 문자열을 인식 할만큼 똑똑 할 것이라고 생각합니다. 그러나 정렬과 같은 플랫폼 고려 사항도 있으므로 하위 문자열이 있기 때문에 반드시 해당 메모리 위치를 다시 사용하는 것이 가장 효율적이라는 것을 의미하지는 않습니다.

은 이러한 최적화가 수행 된을 보장하지 않습니다. 그러나 동시에 표준에 포함되어있는 것도 없습니다.

특정 컴파일러의 설명서를 확인하거나 프로그램을 디스 어셈블하거나 링커 출력을 확인해야합니다.

관련 문제