struct test_struct
{
test_struct() {}
~test_struct() {}
};
#include <vector>
#include <memory>
#include <cstdio>
int main()
{
printf("ctor begin\n");
{
std::vector<std::unique_ptr<test_struct>> test_vec;
const int count = 100000;
for (auto i = 0; i < count; i++) {
test_vec.emplace_back(new test_struct);
}
printf("dtor begin\n");
}
printf("dtor end\n");
}
मैं वीएस -2010 का उपयोग कर रहा हूं, और कुछ हास्यास्पद प्रदर्शन समस्या मिली। उपरोक्त कोड डीबग और रिलीज बिल्ड (ctrl + f5) दोनों में अच्छी तरह से काम करता है, लेकिन जब डीबगर संलग्न होता है (f5), unique_ptr क्लास के लिए dtor कॉल असहिष्णु रूप से धीमा होता है। परिणाम मशीन कोड काफी अनुकूलित है, इसलिए मुझे उम्मीद नहीं है कि यह डीबगर की बजाय संकलक समस्या है, लेकिन मुझे नहीं पता कि इससे कैसे निपटना है। मेरा सवालडीबगर संलग्न होने पर ridiculously micro_ptr dtor कॉल धीमा (msvc)
- क्या यह समस्या आपकी मशीन पर पुन: उत्पन्न करने में सक्षम है?
- इस व्यवहार का क्या कारण है?
- कोई वैकल्पिक हल है?
प्रत्येक printf के बाद flushing का प्रयास करें। – Pubby
@ पब्बी: यह कोई फर्क नहीं पड़ता है, केवल 3 'प्रिंटफ का कुल है, प्रत्येक लूप पुनरावृत्ति के लिए नहीं। –
मैं इसे अपने वीएस -2010 एक्सप्रेस संस्करण पर पुन: उत्पन्न करने में सक्षम था। – RedX