क्या गठबंधन सूचक पर स्मृति ब्लॉक आवंटित करने के लिए जीसीसी या ग्लिब में कोई मानकीकृत कार्य है? एमएसवीसी में _align_malloc() की तरह?गठबंधन malloc()?
उत्तर
memalign कार्यों के परिवार देखें।
यह इस बात पर निर्भर करता है कि आप किस तरह के संरेखण की अपेक्षा करते हैं। क्या आप एक कठोर संरेखण चाहते हैं, या अधिक आराम से संरेखण चाहते हैं?
malloc
परिभाषा के अनुसार एक सूचक को वापस करने की गारंटी है जो सी प्रोग्राम में किसी मानक प्रकार को संग्रहीत करने के लिए सही ढंग से गठबंधन किया गया है (और इसलिए, मानक प्रकार से निर्मित किसी भी प्रकार)। क्या यह आप की तलाश में है? या आपको कुछ अलग चाहिए?
एक आम पी रॉबलेम यह है कि सिम प्रकार (जैसे एसएसई वैक्टर) को "मानक प्रकार" नहीं माना जाता है, और इसलिए उनके पास 'malloc' प्रदान करने की तुलना में कठोर संरेखण आवश्यकताएं होती हैं। – jalf
ऐसा करने का एक और कारण प्रदर्शन है।डेटा संरचना को संरेखित करके, यह 'n + 1' L1 कैश लाइनों के बजाय' n' को फैलाता है जो आम तौर पर 4096 बाइट या आकार में होते हैं, आपको औसत पर तेज़ स्मृति पहुंच मिलती है। कुछ अनुप्रयोगों के लिए, ऑडियो प्रोसेसिंग कहें, जहां बफर एल 1 कैश लाइन का आकार होता है, या उस आकार का एक छोटा सा हिस्सा, इससे बड़ा अंतर हो सकता है। – nitro2k01
@ नाइट्रो 2k01: कैश लाइनें बहुत छोटी हैं उदा। Amd64 पर x86 और 64 पर 32। पेज ओटीओएच 4k हैं। – diapir
[
posix_memalign()
] [1] समारोह स्मृति आवंटन गठबंधन प्रदान करता है और glibc 2.1.91 बाद से उपलब्ध है।
लेकिन जरूरी नहीं कि अन्य compilers के साथ: के हवाले से मानक "। Posix_memalign() फ़ंक्शन सलाहकार सूचना विकल्प का हिस्सा है और सभी कार्यान्वयन पर उपलब्ध कराई होने की जरूरत नहीं"
के बाद से प्रश्न पूछा गया था, एक नया कार्य C11 द्वारा मानकीकृत किया गया:
void *aligned_alloc(size_t alignment, size_t size);
और यह glibc में उपलब्ध (खिड़कियों पर नहीं के रूप में तक मुझे पता है) है। यह memalign
के विपरीत क्रम में अपने तर्क लेता है, माइक्रोसॉफ्ट के _aligned_malloc
के विपरीत, और उसी free
फ़ंक्शन को सामान्य रूप से उपयोग करने के लिए उपयोग करता है।
वहाँ _mm_malloc
और _mm_free
जो 86/64 दुनिया के सबसे compilers द्वारा समर्थित हैं कर रहे हैं, के साथ कम से कम:
- जीसीसी
- MinGW (जीसीसी Win32/win64)
- MSVC
- बजना
- आईसीसी
एक FAIK, ये फ़ंक्शन बिल्कुल मानक नहीं हैं। लेकिन यह मेरे ज्ञान के लिए सबसे समर्थित है। अन्य कार्य अधिक संकलक विशिष्ट हैं:
- _aligned_malloc MSVC और MinGW केवल
- POSIX memalign कार्यों में कम से कम MSVC
वहाँ भी C11 मानक कार्य हैं द्वारा समर्थित नहीं हैं है लेकिन दुर्भाग्य से वे नहीं कर रहे हैं सी ++ 11, और सी ++ में उन्हें शामिल करने के लिए गैर मानक प्रीप्रोसेसर परिभाषित करता है ...
- 1. malloc
- 2. Malloc हुक्स
- 3. सी - malloc
- 4. आवंटन malloc
- 5. ग्लिबैक malloc
- 6. गठबंधन स्मृति आवंटन क्या है?
- 7. malloc स्मृति बाहर शून्यिंग? malloc स्मृति बाहर के शून्यीकरण
- 8. सी कॉलोक बनाम malloc
- 9. Malloc और शून्य प्वाइंटर
- 10. सी में MalloC++ निर्माता
- 11. शून्य आकार malloc
- 12. डिबगिंग malloc त्रुटियों
- 13. मुक्त अंतरिक्ष malloc
- 14. कर्नेल में malloc
- 15. malloc() और ढेर मेमोरी
- 16. कंपाइलर त्रुटि: malloc
- 17. malloc + स्वचालित संदर्भ गणना?
- 18. malloc त्रुटि हैंडलिंग
- 19. malloc struct संकेत
- 20. का उपयोग malloc लंबाई
- 21. सी, malloc() और सरणी लंबाई
- 22. सी - malloc और सरणियों भ्रम
- 23. कैसे malloc काम करता है?
- 24. नई,, हटाने malloc और मुक्त
- 25. malloc एक एम्बेडेड सिस्टम में
- 26. चार ** टेबल malloc कैसे करें?
- 27. सी 99 + में नामित प्रारंभिक और malloc संयोजन?
- 28. जावास्क्रिप्ट - गठबंधन करने या गठबंधन करने के लिए, यह प्रश्न
- 29. jQuery गठबंधन घटना कार्यों
- 30. अक्ष गठबंधन आयतों चौराहे
stdlib केवल संस्करण http://stackoverflow.com/questions/227897/how-to-allocate-aligned-memory-only-using- मानक-पुस्तकालय –