메모리 정렬
-
64비트 시스템에서 메모리 정렬 경계에 대해개발/C·C++ 2024. 10. 11. 14:52
64bit 프로세서의 64bit 모드에서 메모리 동적할당을 하면 주소 값이 16바이트 정렬이 기본 값인 것 같다.struct PureNode{ int a; int b; int c;};int main(){ constexpr int ALIGN = 16; for (int i = 0; i (new PureNode()); uintptr_t node2 = reinterpret_cast(new PureNode()); uintptr_t node3 = reinterpret_cast(new PureNode()); uintptr_t node4 = reinterpret_cast(new PureNode()); uintptr_t node5 = reinterpret_cast(new PureNode()); ASSERT_C..
-
메모리 정렬, 패딩 그리고 비트필드(feat. 구조체)개발/C·C++ 2024. 7. 7. 10:37
컴퓨터는 극한의 효율을 추구해야 한다. 경쟁에서 우위를 점해야 하기도 하고 엔지니어 관점에도 같은 전기를 쓰면서 최대 성능과 최대 효율을 뽑는 것이 중요한 문제일 수밖에 없다. 메모리 정렬에 몇 가지 규칙이 존재한다.1. 데이터가 저장되는 메모리 경계가 존재한다2. 1 바이트 데이터는 1 바이트 경계, 4 바이트 데이터는 4 바이트 경계3. 여기서 말하는 경계는 4바이트 데이터가 저장되는 시작 주소가 4의 배수인 것을 말한다4. 예를 들어 배열이 아닌 int형 데이터는 0x00000040(편의상 32비트 주소 체계 기준)에 저장된다 메모리 정렬을 이야기할 때 데이터를 모아놓은 구조체가 자주 등장한다.다음의 두 구조체는 자료형의 총합은 같지만 실제 메모리 공간에서 차지하는 크기가 다르다.// 정렬되지 않은..