이 주제에 관해서는 이미 질문이 있습니다 (특히 How to get address of some struct member in array of structures).지도 파일의 멤버 구조체 주소?
제 질문은 다음과 같습니다. struct
을 사용하여 하드웨어 장치를 설명 할 때 각 구조 구성원이 하드웨어 장치의 일부 레지스터에 해당합니다. 구조의 각 구성원이 올바르게 매핑되는지 어떻게 확인할 수 있습니까? 하드웨어의 각 레지스터?
컴파일러의 ABI가 멤버의 정렬을 지정하면 사용자가 실수를 할 수도 있습니다. 매핑이 올바르게 수행되었는지 확인하는 유일한 방법은 런타임에 확인하는 것입니다. 맵 파일 (적어도 GNU ld의 경우)은 구조체 멤버의 배치에 대한 단서를 제공하지 않습니다.
각 구조 구성원이있는 컴파일러 또는 링크 시간을 알 수있는 방법이 있습니까?
정확합니다. 이식성있는 방법으로는 불가능합니다. 당신은 특정 컴파일러의 확장 및/또는 동작에 의존해야 할 것입니다. – Ctx
이것은 어쨌든 특정 시스템입니다. 코드를 완전히 다른 종류의 컴퓨터로 옮기면 하드웨어 장치가 없을 것입니다. –
절대적으로 동의합니다. (CPU, 컴파일러)에 따라 다릅니다. 그러나 동일한 CPU 및 동일한 컴파일러를 사용하더라도 매핑에 실수가 없음을 확인하고 Map 파일을 통해 구조 멤버의지도를 표시 할 수있는 방법을 찾고 있습니다. 그러나 유일한 방법은 런타임에 해당 주소를 표시하는 코드 조각을 갖는 것입니다. –