C++의 메모리 정렬, 일반적인 접근법, 컴파일러의 차이점 및 일반적인 함정에 대해 좋은 (포괄적 인) 문서를 찾고 있습니다. 주제에 대한 나의 이해가 올바른지 확인하고 새로운 것을 배울 수 있습니다.다른 플랫폼/컴파일러에서 C++ 메모리 정렬에 대한 설명서는 어디에서 찾을 수 있습니까?
이 질문은 내가 다음과 같은 구문을 사용하는 또 다른 질문에 대한 내 대답에 의해 영감은 :
char const buf[1000] = ...;
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // shift can be anything
그것은 메모리 정렬 규칙을 따르지 않는 비판했다. 이 접근 방식이 메모리 정렬 관점에서 결함이있는 이유를 설명해 주시겠습니까? 예를 들어 작동하지 않을 경우 대단히 감사하겠습니다. 나는 이것이 일반적으로 나쁜 접근법이라는 것을 알고 있지만, 종종 네트워크 프로토콜 구현에 사용하기 때문에 이론적 인 것보다 더 실용적인 문제입니다.
여기에도 엄격한 별칭을 언급하지 마십시오. 다른 질문입니다.
시스템의 워드 크기의 배수가 아닙니다. 32 비트 단어의 중간에있는 단어 중간에 포인터를 얻으 려하면 비판의 대상이 될 수 있습니다. –
시프트가 4의 배수 인 경우에도 'buf'가 4의 배수 인 주소에서 시작한다는 보장이 없습니다 – nos
'시프트'는 무엇이든 가능합니다 질문을 업데이트했습니다. –