Tôi đã nhìn thấy vô số câu hỏi của biểu mẫu "Tôi không thích đệm làm thế nào để tắt nó đi", nhưng chưa tìm thấy bất cứ điều gì về buộc trình biên dịch để cung cấp thêm đệm .C (++) struct buộc đệm thêm
Các trường hợp cụ thể mà tôi có vẻ như
struct particle{
vect2 s;
vect2 v;
int rX;
int rY;
double mass;
int boxNum;
};
đâu vect2
là một đơn giản struct {double x; double y;} vect2
. Để sử dụng SSE2, tôi cần để có thể tải một cặp đôi, liên kết với 16 byte ranh giới. Điều này được sử dụng để làm việc, cho đến khi tôi thêm int
, đẩy kích thước cấu trúc của tôi từ 48 byte lên 56 byte. Kết quả là segfaults.
Có một số loại chỉ thị trình biên dịch tôi có thể sử dụng hoặc nói "pad cấu trúc này để biến nó thành bội số 16 byte" hay "cấu trúc này có căn chỉnh 16 byte"? Tôi biết tôi có thể làm điều đó bằng tay (tacking trên một char thêm [12], ví dụ), nhưng tôi thực sự chỉ cần nói với trình biên dịch (GCC, tốt nhất là ICC tương thích), và không phải làm điều đó bằng tay nếu tôi thay đổi struct trong tương lai.
Trong C++ 11 hiện có ['alignas'] (http://en.cppreference.com/w/cpp/language/alignas) cho mục đích này. – ildjarn
Tôi không nghĩ rằng GCC đã thực hiện điều này được nêu ra, mặc dù. – chris
Sau đó, xem http://stackoverflow.com/questions/6959261/how-can-i-simulate-alignast –