나는 alignas가 어떻게 사용되어야하는지 이해하려고 노력하고 있는데, 그것이 pragma pack을 대체 할 수 있는지 궁금해합니다.하지만 그것을 확인하기 위해 열심히 노력했지만 운이 없었습니다. gcc 4.8.1 (http://ideone.com/04mxpI) 사용하기 나는 항상 STestAlignas 이하에서는 8 바이트를, pragma pack에서는 5 바이트를 얻는다. 나는 sizeof (STestAlignas)가 5를 반환하도록하고 싶습니다. 3.3 (http://gcc.godbolt.org/)에이 코드를 실행하려고 시도했지만 오류가 발생했습니다.alignas를 사용하여 pragma pack을 바꾸는 방법은 무엇입니까?
!! 오류 : 요청 된 정렬이 8의 최소 정렬보다 작습니다. alignas 사용 바로 아래에 'long'을 입력하십시오.
그래서 alignas에 대한 최소 정렬 값이 있습니까? GCC 4.8.1에 대한
#include <iostream>
#include <cstddef>
using namespace std;
#pragma pack(1)
struct STestPragmaPack {
char c;
long d;
} datasPP;
#pragma pack()
struct STestAttributPacked {
char c;
long d;
} __attribute__((packed)) datasAP;
struct STestAlignas {
char c;
alignas(char) long d;
} datasA;
int main() {
cout << "pragma pack = " << sizeof(datasPP) << endl;
cout << "attribute packed = " << sizeof(datasAP) << endl;
cout << "alignas = " << sizeof(datasA) << endl;
}
결과 :
pragma pack = 5
attribute packed = 5
alignas = 8
'의 #pragma 포장 라인 영원히 비 휴대용 확장 될 것입니다. 일부 아키텍처는 정렬되지 않은 메모리 액세스를 지원하지 않습니다. –