동적으로 할당 된 메모리 대 시간을 컴파일구조의 메모리 정렬 내가이 문을 발견 할 때 난 그냥 설명에 대한 <strong>posix_memalign</strong> 기능에 대한 glibc는 설명서를 통과했다
malloc과 realloc에 의해 반환되는 블럭의 주소 GNU 시스템에서 항상 은 8의 배수 (또는 64 비트 시스템에서는 16 개)입니다. 주소가 보다 큰 2의 배수가되는 블록이 필요하면 memalign, posix_memalign 또는 valloc을 사용하십시오.
I 방금 int 데이터의 부재를 포함하는 단순한 구조를 고려할 경우
struct Mystruct
{
int member;
};
그럼 I MYSTRUCT가 정렬 된 4 바이트가되어야한다고 볼 수있다. 그러나 64 비트 아키텍처의 libc 매뉴얼에 따르면 동적으로 그러한 구조체에 메모리를 할당하면 16 바이트 정렬의 주소에 할당 된 메모리가 반환됩니다. 만약 내가 잘못
저를 수정합니다. 내게는 컴파일러가 전역/정적/자동 변수 (데이터, bss, 스택)에 대해서만 구조체의 자연 정렬을 사용하는 것처럼 보입니다. 그러나 힙 메모리에 같은 구조체를 할당하기 위해 malloc 호출은 미리 정의 된 정렬 (32 비트 아키텍처에서는 8 개, 64 비트 아키텍처에서는 16 개)을 사용합니다.