memory-alignment

    3

    2답변

    이 유형의 개체를 스택에 만들면이 개체의 메모리가 올바르게 정렬됩니다. union my_union { int value; char bytes[4]; }; 우리는 스택 [4] 문자 바이트를 만든 다음 그것을 정렬에 문제가있을 수 있습니다 정수로 캐스팅해야 할 경우. 우리는 힙으로 생성하여이 문제를 피할 수 있지만, 조합 객체에 대한

    3

    4답변

    C++에서 typedef 구조의 경우 #pragma pack이 필요한 이유는 무엇입니까? 특히 네트워크 통신에서 이러한 구조를 사용하는 경우.

    4

    1답변

    찾았습니다. hard way 적어도, boost::program_options은 컴파일러가 구성된 구조체 정렬에 종속됩니다. 기본 설정을 사용하여 부스트를 빌드하고이를 4 바이트 정렬 (/Zp4)을 사용하는 프로젝트와 연결하면 런타임에 실패합니다 (program_options를 사용하여 최소 테스트 수행). Boost는 잘못된 호출 규칙을 나타내는 어설 션

    1

    4답변

    I은 ​​5 바이트에 달하는,이 4 바이트를 취하고 그 1 바이트를 취하도록 c는 숯 가변되도록 구성 typedef struct EData { int a; char c; } Edata obj; a는 정수 변수가 하지만 sizeof(obj)을 인쇄하면 8 바이트이 표시됩니다. 이유가 무엇입니까?

    1

    1답변

    우리는 메모리 접근 횟수를 줄이기 위해 왜 데이터 정렬이 필요한지 (그리고 패딩과 같은 모든 노력을 했음) 이해합니다. 그러나 이것은 프로세서가 단지 4의 배수 주소를 가져올 수 있다고 가정합니다. 비트 아키텍처). 그리고 그 가정 때문에 우리는 메모리를 정렬해야합니다. 내 질문 : 왜 우리는 4의 배수 (효율성, 하드웨어 제한, 또 다른 하나)에 액세스

    3

    2답변

    calloc의 대부분의 구현은 크기를 정렬로 취급하고 다음 지원되는 입상까지 반올림 해 주는지 궁금합니다. 그렇다면 다음 2의 제곱으로 올림하거나 8 또는 16의 다음 배수로 반올림합니까? calloc이 매개 변수를 동일하게 유지하면 어떻게 작동합니까? 데이터가 정렬되지 않았습니까? 감사합니다.

    3

    6답변

    OSAtomicDecrement (mac 특정 원자 연산)를 사용하려면 4 바이트의 SInt32를 제공해야합니다. 이러한 종류의 요리가 가능합니까? 정렬 문제를 해결할 다른 방법이 있습니까? struct SomeClass { SomeClass() { member_ = &storage_ + ((4 - (&storage_ % 4)) % 4);

    4

    3답변

    왜 메모리가 버스의 데이터 너비에 따라 4 바이트와 8 바이트로 정렬되어야 하는지를 이해했습니다. 하지만 다음 문장은 나를 혼란스럽게합니다 "OoDrive를 사용하는 장치에서 수행되는 모든 I/O는 512 바이트의 alligned 및 512 바이트의 배수 여야합니다." 주소를 512 바이트로 정렬해야하는 이유는 무엇입니까?

    3

    3답변

    이 코드는 작동하지만 InterlockedIncrement 함수를 올바르게 사용 했습니까? m_count의 올바른 메모리 정렬이 가장 중요한 문제입니다. 우리가 x86-64 시스템에 있고 64 비트 응용 프로그램을 컴파일한다고 가정합니다 (중요한 경우). 그건 그렇고, 내 실제 목적을 위해 나는 m_count를 휘발성 long으로 선언 할 수 없으며, In

    1

    5답변

    유형 T와 구조체가 T 유형의 유일한 균일 한 요소 만 갖는 경우가 있습니다. struct Foo { T one, T two, T three }; 나는 fallowing 방식으로 접근하고 싶습니다이 : struct Foo { T one, T two, T three T &operator [