2010-10-26 8 views
5

जीसीसी 4.5 में फ़ंक्शन को कॉल करते समय स्टैक को 16-बाइट सीमा से गठबंधन किया जाना चाहिए (पिछले संस्करणों को केवल 4-बाइट संरेखण की आवश्यकता होती है)।छोटी स्टैक सीमा के लिए व्यापार बंद क्या है?

4-बाइट 32-बिट मशीन के लिए उचित है। 16-बाइट केवल "और 0xfffffff0,% esp" द्वारा संरेखित करना आसान है।

लेकिन 4-बाइट सीमा से अधिक स्मृति की लागत हो सकती है, है ना? संक्षेप में, मेरा सवाल यह है कि जीसीसी 4.5 डिफ़ॉल्ट रूप से 16-बाइट क्यों करता है? क्या यह मूल्यवान है?

बहुत बहुत धन्यवाद!

उत्तर

3

आधुनिक प्रोसेसर के लिए वेक्टर एक्सटेंशन की संख्या लोड/स्टोर के लिए 16-बाइट संरेखण की आवश्यकता होती है। कुछ आर्किटेक्चर अनचाहे भार प्रदान करते हैं, लेकिन आम तौर पर ये काफी धीमे होते हैं।

memcpy के लिए इस संरेखण के लिए कुछ फायदे हो सकते हैं और अन्य समान निम्न स्तर के संचालनों का अधिक सख्ती से गठबंधन स्रोत/गंतव्यों का सामना करना पड़ता है।

इसके अलावा यह लगभग निश्चित रूप से ऑटो वेक्टरिसेशन सफल होने की संभावनाओं को बढ़ाता है, जो कुछ हालिया जीसीसी संस्करणों में शामिल है।

संबंधित मुद्दे