में वैश्विक स्तर पर मॉलोक ओवरराइड करें, मैं विज़ुअल सी ++ (2005) में वैश्विक स्तर पर मॉलोक और संबंधित कार्यों को ओवरराइड करने का एक तरीका जानने का प्रयास कर रहा हूं। मेरा सेटअप एक डीएलएल है जो स्थिर रूप से जुड़े रनटाइम लाइब्रेरी के साथ है जिसमें मेरे स्वयं के सी ++ कोड, बाहरी सी ++ और सी कोड दोनों शामिल हैं। मैं जो हासिल करना चाहता हूं वह है कि डीएल के उपयोगकर्ता को स्मृति आवंटन कार्यों के अपने कार्यान्वयन को सेट करना है।विज़ुअल सी ++
समाधान है कि मैं का उपयोग नहीं कर सकते हैं: मेरी कोड स्थान है जहाँ इस होगा कई आवंटन नहीं कब्जा का मतलब है में बाहरी सी पुस्तकालयों के बहुत सारे
- अधिभावी नए और विश्व स्तर पर हटा सकते हैं, है।
मॉलोक को एक अलग प्रतीक पर परिभाषित करना। यह मुझे इस बाहरी परिभाषाओं के निर्माण की सभी सेटिंग्स की परिभाषाओं में परिभाषित करने के लिए मजबूर करेगा और मैं वास्तव में इससे बचना चाहता हूं।
हालात के बारे में मैं
- परवाह नहीं है बाह्य पुस्तकालयों में से किसी किसी अन्य तरीके से स्मृति का आवंटन कर रहे हैं (HeapAlloc, स्मृति मैप की गई फ़ाइलों या जो कुछ भी वे के साथ आ), मुझे लगता है कि स्वीकार यह malloc overriding द्वारा ठीक से ट्रैक नहीं किया जाएगा।
सबसे उचित समाधान मैं के साथ किसी भी तरह कड़ी प्रक्रिया के साथ हस्तक्षेप कर रहा है और ऊपर आ सकते हैं यकीन है कि मेरे अपने malloc मानक वाले के बजाय जोड़ा जा रहा है, खासकर मैं पुराने malloc उपयोग करने में सक्षम होना चाहते हैं डिफ़ॉल्ट रूप से कार्य करता है।
Google perf-tools में ऐसा लगता है कि वे मूल कार्य को कॉल करने से पहले एक हुक फ़ंक्शन को कॉल करने की अनुमति देने के लिए रनटाइम पर मैन्युअल रूप से फ़ंक्शन का कोड पैच करते हैं। क्या यह वास्तव में ऐसा करने का सबसे अच्छा तरीका है?
क्या आप लिनक्स पर एलडी_PRELOAD के समान काम करने की कोशिश कर रहे हैं? – LB40
मैं एलडी_PRELOAD से परिचित नहीं हूं, लेकिन ऐसा लगता है कि गतिशील लिंकिंग से संबंधित है, मेरे मामले में मॉलोक, मुफ्त और उनके मित्र स्थिर रूप से जुड़े हुए हैं। – Laserallan
क्या आप समझा सकते हैं कि आपको ऐसा क्यों करना है? –