2009-08-04 5 views
6

हम g ++ 4.2.4 का उपयोग करते हैं और मैं अपने कोड में कुछ प्रदर्शन समस्याओं को ट्रैक करने का प्रयास कर रहा हूं।फ़ंक्शन __tcf_0 क्या है? (Gprof और g ++ का उपयोग करते समय देखा गया)

मैं gprof चल रहा हूँ प्रोफ़ाइल उत्पन्न करने के लिए, और मैं निम्नलिखित "परायापन" कि में सबसे महंगी समारोह __tcf_0 है हो रही है:

Each sample counts as 0.01 seconds. 
% cumulative self    self  total   
time seconds seconds calls ms/call ms/call name  
40.00  0.04  0.04  1 40.00 95.00 __tcf_0 

इस समारोह तो प्रतीत होता है करने के लिए मेरे उपयोगकर्ता से ज्यादातर कॉल कार्य (यानी यह वह है जिसे मुख्य से बुलाया जाता है)। इसके लिए मैंने पाया निकटतम स्पष्टीकरण here था, लेकिन वह लिंक स्थैतिक वस्तुओं और अतुलनीय को संदर्भित करता है, और मुझे नहीं लगता कि यह मेरे मामले में लागू होता है।

यदि यह सहायक है, तो मैं बूस्ट (प्रोग्राम_प्शन और फ़्यूज़न) और एचडीएफ 5 पुस्तकालयों का उपयोग कर रहा हूं।

अद्यतन:

आदेश जब निर्माण मैं का उपयोग करें:

g++ -Wreturn-type -Wunused -Winline -pg -DLINUX -DHAS_SETENV \ 
    -DFUSION_MAX_MAP_SIZE=15 -DFUSION_MAX_VECTOR_SIZE=15 -g -O0 \ 
    --param large-function-growth=300 --param inline-unit-growth=200 

उत्तर

3

__tcf_0 एक समारोह जो स्थिर वस्तुओं के नाशक कॉल करता है और जो प्रत्येक स्थिर वस्तुओं के लिए पंजीकृत किया गया है होना करने के लिए वास्तव में लगता है, करने के लिए बाहर निकलने के लिए बुलाया जाना चाहिए (this page पर जो कहा गया है उसे लेने के लिए)

अब, आपके जीप्रोफ का नतीजा काफी अजीब है, क्योंकि अधिकांश कार्य केवल समय लेता है एस 0.04 सेकेंड, जिसका अर्थ है कि पूरा प्रोग्राम निष्पादित करने के लिए 0.1 एस लेता है। अगर मुझे गलत नहीं लगता है, तो मेरा अनुमान है कि आपने सही तरीके से प्रोफाइल नहीं किया है। क्या आपने अपना कोड प्रोफाइलिंग सक्षम के साथ संकलित किया था?

+0

मैंने बिल्ड कमांड जोड़ा है जिसे हम प्रश्न के लिए उपयोग करते हैं। हमारे पास एक सुंदर लचीला निर्माण प्रणाली है, और यह एक विशेष "gprof" कॉन्फ़िगरेशन का उपयोग कर रहा है जिसे मैंने अतीत में सफलता के साथ उपयोग किया है। तो सिद्धांत रूप में मैं * सोचता हूं * मेरे पास आवश्यक सभी सेटिंग्स हैं। –

+0

दोनों उत्तर काफी सही हैं - लेकिन प्रतिनिधि शायद आपके लिए अधिक उपयोगी है। –

5

जी ++ इस नाम के साथ कार्यों को उत्पन्न करता है। वे स्थैतिक वस्तुओं के विनाशक को बुलाते हैं और कन्स्ट्रक्टर कहलाते समय atexit() के साथ पंजीकृत होते हैं।

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