필자의 소스 코드에는 올바른 들여 쓰기를 유지하고자하는 욕구 때문에 공백 문자를 제외하고는 똑같은 리터럴 문자열이 많이 있습니다. 컴파일러는 두 바이트 모두에 대해 메모리 공간을 재사용 할 수 있다는 것을 알기에 현명합니까? 단 하나의 문자열을 몇 바이트 만 오프셋하면됩니까?중복 리터럴을 통합 할 때 C 컴파일러가 문자열 중간에 표시됩니까?
답변
간단한 대답 : 아니요.이 작업을 수행하는 컴파일러에 대해 잘 모릅니다. 이 구현 문자열 상수와 동일하거나 중복 표현으로 일정한 화합물 리터럴 저장소를 공유 할 수
실제 대답이 아니기 때문에이를 언급해야합니다. –
글쎄,이 종류의 문자열 풀링을 수행하는 컴파일러가 있는지 질문하는 것이 좋습니다. 내가 아는 한 사실이 아니야. 그들은 그것을 할 수는 있지만 그렇게하지는 않습니다. 그래서 이것에 대해 다른 의견을 말해야할까요? 그럴만 한 가치가 없다고? – TheBlastOne
안녕하세요! 내가 8 downvotes에 대한 배지를 원한다! 그리고 왜 upvotes? :) – TheBlastOne
짧은 답변 : 아마도.
답변 : 구현에 따라 다릅니다. 일반적으로 C 컴파일러에는 컴파일러가 모든 문자열 리터럴을 ROM에 인접하게 저장할 수있게 해주는 "문자열 풀"또는 이와 유사한 옵티 마이저 기능이 있습니다.
그런 다음 문자열 풀의 내용을 최적화 할 수 있습니다. 두 번 나타나는 동일한 문자열이 거의 최적화 될 것입니다. 대부분의 컴파일러는 하위 문자열을 인식 할만큼 똑똑 할 것이라고 생각합니다. 그러나 정렬과 같은 플랫폼 고려 사항도 있으므로 하위 문자열이 있기 때문에 반드시 해당 메모리 위치를 다시 사용하는 것이 가장 효율적이라는 것을 의미하지는 않습니다.
은 이러한 최적화가 수행 된을 보장하지 않습니다. 그러나 동시에 표준에 포함되어있는 것도 없습니다.
특정 컴파일러의 설명서를 확인하거나 프로그램을 디스 어셈블하거나 링커 출력을 확인해야합니다.
- 1. C++ 두 문자열 리터럴을 비교하십시오
- 2. C# 문자열 중간에 문자열 삽입
- 3. 문자열 리터럴을 사용하지 않을 때 문자열 보간
- 4. 벡터 문자열 문자가 문자열 중간에 바뀝니다. C++
- 5. JavaScript의 문자열 리터럴을 포함하는 문자열
- 6. ANTLR로 문자열 리터럴을 구문 분석 할 때 NoViableAltException이 발생했습니다.
- 7. Bison은 C 문자열 리터럴을 적절히 인식하지 못합니다.
- 8. 문자열 리터럴을 포함하는 Doctest
- 9. 문자열 리터럴을 나눌 곳
- 10. C# 문자열 중복 문제
- 11. Django가 문자열 리터럴을 무시하도록 만들기
- 12. 문자열 중간에 문자 추가
- 13. 변수의 문자열 리터럴을 얻는 방법
- 14. C에서 문자열 리터럴을 역 참조하는 효과는 무엇입니까?
- 15. 이 공용 멤버 함수를 다른 파일에 선언 할 때 왜 중복 된 심볼이 표시됩니까? (C++)
- 16. C#의 설정 파일에서 문자열 리터럴을 전달하는 방법
- 17. C++ 0x 원시 문자열 리터럴을 구현하는 방법은 무엇입니까?
- 18. EC2에 C 컴파일러가 없습니까?
- 19. HTML 문자열 중간에 텍스트 삽입
- 20. 컴파일 시간 문자열 리터럴을 사용한 메타 프로그래밍
- 21. C 전 처리기를 사용하여 scanf에 대한 문자열 리터럴을 구성 하시겠습니까?
- 22. C#의 문자열에서 따옴표 붙은 문자열 리터럴을 제거하려면 어떻게해야합니까?
- 23. C++에서 문자열 리터럴을 매크로 이름으로 사용할 수 있습니까?
- 24. C# 클래스에 상수 문자열 리터럴을 배치하는 권장 코딩 방법은 무엇입니까
- 25. VB.NET에서 중복 코드 통합
- 26. 은 C# 컴파일러가 exentisble입니까?
- 27. 문자열 리터럴을 사용하여 NSArray를 만드는 방법은 무엇입니까?
- 28. Sqlite3에서 UTF-8 문자열 리터럴을 인용하는 방법
- 29. 긴 중복 문자열
- 30. before_create가 실패 할 때 경고 메시지가 표시됩니까?
일반적인 접미사가있는 리터럴을 말합니까? –
코드 예 – SomeWittyUsername
@Dvorak을 추가하십시오. 예, 그렇다면 하나의 문자열이 다른 문자열의 접미사임을 의미합니다. 전의. "abc"및 "___abc". – cleong