คำถามติดแท็ก pragma-pack

11
#pragma pack effect
ฉันสงสัยว่ามีใครบางคนสามารถอธิบายให้ฉันฟังได้ว่า#pragma packคำสั่ง preprocessor ทำอะไรและที่สำคัญกว่านั้นคือเหตุใดจึงต้องการใช้มัน ฉันเช็คเอาท์หน้า MSDNซึ่งให้ข้อมูลเชิงลึก แต่ฉันหวังว่าจะได้รับความรู้เพิ่มเติมจากผู้ที่มีประสบการณ์ ฉันเคยเห็นมันในรหัสก่อนหน้า แต่ฉันไม่สามารถหาได้อีกต่อไป

5
__attribute __ ของ gcc เป็น (บรรจุแล้ว) / #pragma ไม่ปลอดภัยหรือไม่
ใน C คอมไพเลอร์จะวางโครงสมาชิกของโครงสร้างตามลำดับที่ประกาศโดยมีการเติมไบต์ที่เป็นไปได้แทรกระหว่างสมาชิกหรือหลังสมาชิกรายสุดท้ายเพื่อให้แน่ใจว่าสมาชิกแต่ละคนได้รับการจัดตำแหน่งอย่างถูกต้อง gcc จัดเตรียมส่วนขยายของภาษา__attribute__((packed))ซึ่งบอกคอมไพเลอร์ว่าไม่ให้แทรกการซ้อนทำให้สมาชิกโครงสร้างไม่ถูกต้อง ตัวอย่างเช่นถ้าระบบต้องการintวัตถุทั้งหมดที่มีการจัดตำแหน่งแบบ 4 ไบต์__attribute__((packed))สามารถทำให้intสมาชิก struct ได้รับการจัดสรรที่ออฟเซ็ตแปลก ๆ การอ้างอิงเอกสาร gcc: แอตทริบิวต์ `ที่บรรจุ 'ระบุว่าเขตข้อมูลตัวแปรหรือโครงสร้างควรมีการจัดตำแหน่งที่เล็กที่สุดที่เป็นไปได้ - หนึ่งไบต์สำหรับตัวแปรและหนึ่งบิตสำหรับเขตข้อมูลเว้นแต่ว่าคุณจะระบุค่าที่มากขึ้นด้วยแอตทริบิวต์` จัดชิด' เห็นได้ชัดว่าการใช้ส่วนขยายนี้อาจส่งผลให้ข้อกำหนดด้านข้อมูลมีขนาดเล็กลง แต่มีโค้ดที่ช้ากว่าเนื่องจากคอมไพเลอร์จะต้องสร้างรหัสเพื่อเข้าถึงสมาชิกไบต์ที่ไม่ถูกต้องในแต่ละครั้ง แต่มีกรณีใดบ้างที่สิ่งนี้ไม่ปลอดภัยหรือไม่? คอมไพเลอร์สร้างรหัสที่ถูกต้อง (แม้ว่าช้ากว่า) เสมอเพื่อเข้าถึงสมาชิกที่มีโครงสร้างไม่ตรงตามที่กำหนดหรือไม่? เป็นไปได้ไหมที่จะทำเช่นนั้นในทุกกรณี?
164 c  gcc  pragma-pack 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.