इन प्रकार पर विचार करें:क्या जीसीसी कॉन्फ़िगर करने योग्य में "खाली आधार अनुकूलन" है?
struct A {};
struct B : A { int i; };
sizeof(A) > 0
के रूप में मानक के लिए आवश्यक।
sizeof(B)
खाली आधार अनुकूलन के कारण 4 होना चाहिए। फिर भी जीसीसी 4.1.1 पर यह 5 है (मैं इस क्षेत्र में 1 का पैक उपयोग कर रहा हूं)। और असंगत रूप से - मेरी कुछ फाइलें इसे प्राप्त कर रही हैं, कुछ नहीं हैं। यह सुनिश्चित नहीं हो सकता कि मतभेद अभी तक क्या हैं, हमारे पास एक बड़ा प्रजनन है।
अन्य तीन कंपाइलर्स पर मैं (माइक्रोसॉफ्ट और फ्रीस्केल द्वारा) उपयोग कर रहा हूं, मुझे यह समस्या नहीं है। this article के अनुसार खाली आधार अनुकूलन वैकल्पिक रूप से वैकल्पिक है।
क्या जीसीसी 4.1.1 में इसे ट्यून करने के लिए कोई संकलक विकल्प या प्रगति है? मैं इस मुद्दे के आसपास काम कर सकता हूं लेकिन मैं समझना चाहता हूं कि पहले क्या हो रहा है। मैं थोड़ी देर के लिए googled और कुछ भी नहीं लग रहा है।
इंटेल कंपाइलर इसे सही और साथ ही जीसीसी भी प्राप्त करता है। एमएसवीसी अतिसंवेदनशील है और खाली आधार अनुकूलन पर मानकों का उल्लंघन करता है जब आधार वर्गों में से एक भी पहले सदस्य का आधार वर्ग है। मैंने वीसी ++ (2005/2008) और जीसीसी (4.1.1) खाली-बेस नियमों के लिए बहुत अधिक नियम पोस्ट किए हैं। http://stackoverflow.com/questions/547290/is-the-empty-base-optimization-in-gcc-configurable/919694#919694 – Adisak