मैंने फ़ॉर्म के अनगिनत प्रश्नों को देखा है "मुझे पैडिंग पसंद नहीं है मैं इसे कैसे बंद कर सकता हूं", लेकिन अभी तक अतिरिक्त पैडिंग प्रदान करने के लिए कंपाइलर को मजबूर करने के बारे में कुछ भी नहीं मिला है ।सी (++) स्ट्रक्चर फोर्स अतिरिक्त पैडिंग
विशिष्ट मामले मैं की तरह
struct particle{
vect2 s;
vect2 v;
int rX;
int rY;
double mass;
int boxNum;
};
कहाँ vect2
एक सरल struct {double x; double y;} vect2
है लगता है। एसएसई 2 का उपयोग करने के लिए, मुझे 16 बाइट सीमाओं के साथ गठबंधन, युगल की एक जोड़ी लोड करने में सक्षम होना चाहिए। यह तब तक काम करता था जब तक मैंने अतिरिक्त int
जोड़ा, मेरे संरचना आकार को 48 बाइट से 56 बाइट तक दबाया। परिणाम segfaults है।
क्या कोई ऐसा संकलक निर्देश है जिसका मैं उपयोग कर सकता हूं या तो कहता है कि "इस स्ट्रक्चर को इसे 16 बाइट्स लम्बाई बनाने के लिए पैड" या "इस संरचना में 16-बाइट्स का संरेखण है"? मुझे पता है कि मैं इसे मैन्युअल रूप से कर सकता हूं (उदाहरण के लिए, एक अतिरिक्त char [12] पर काम करना), लेकिन मैं वास्तव में बस संकलक (जीसीसी, अधिमानतः आईसीसी संगत) को बताऊंगा, और यदि मैं इसे बदलता हूं तो इसे मैन्युअल रूप से नहीं करना होगा भविष्य में संरचना।
सी ++ में 11 इस उद्देश्य के लिए अब ['alignas'] (http://en.cppreference.com/w/cpp/language/alignas) है। – ildjarn
मुझे नहीं लगता कि जीसीसी ने अभी तक इसे लागू किया है, हालांकि। – chris
फिर http://stackoverflow.com/questions/6959261/how-can-i-simulate-alignast –