您好,登錄后才能下訂單哦!
本篇內容介紹了“C++智能指針對程序文件大小有什么影響”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
C++智能指針對程序文件大小的影響
于是我想做一個實驗,看智能指針會帶來多大的文件體積開銷。
于是做了個對比實驗:
raw_ptr.cpp
#include < iostream>
#include < vector>
using namespace std;
class Child;
class Parent {
public:
~Parent();
Child* newChild();
void hello() {
cout << "Parent::Hello" << endl; } private: vector children_; }; class Child { public: Child(Parent *p) : parent_(p) {} void hello() { cout << "Child::Hello" << endl; parent_->hello();
}
private:
Parent *parent_;
};
Child* Parent::newChild()
{
Child *child = new Child(this);
children_.push_back(child);
return child;
}
Parent::~Parent()
{
for (int i = 0; i < children_.size(); ++i) delete children_[i]; children_.clear(); } int main() { Parent p; Child *c = p.newChild(); c->hello();
return 0;
}
smart_ptr.cpp
#include < iostream>
#include < vector>
#include < memory>
using namespace std;
class Child;
class Parent : public enable_shared_from_this {
public:
~Parent();
shared_ptr newChild();
void hello() {
cout << "Parent::Hello" << endl; } private: vector > children_;
};
class Child {
public:
Child(weak_ptr p) : parent_(p) {}
void hello() {
cout << "Child::Hello" << endl; shared_ptr sp_parent = parent_.lock(); sp_parent->hello();
}
private:
weak_ptr parent_;
};
shared_ptr Parent::newChild()
{
shared_ptr child = make_shared(weak_from_this());
children_.push_back(child);
return child;
}
Parent::~Parent()
{
children_.clear();
}
int main() {
shared_ptr p = make_shared();
shared_ptr c = p->newChild();
c->hello();
return 0;
}
empty.cpp
#include < iostream>
int main()
{
std::cout << "hello" << std::endl; return 0; } Makefile all: g++ -o raw_ptr raw_ptr.cpp -O2 g++ -o smart_ptr smart_ptr.cpp -O2 g++ -o empty empty.cpp -O2 strip raw_ptr strip smart_ptr strip empty empty 是什么功能都沒有,編譯它是為了比較出,raw_ptr.cpp 中應用程序代碼所占有空間。 將 raw_ptr 與 smart_ptr 都減去 empty 的大小: raw_ptr 4192B smart_ptr 8360B 而 smart_ptr 比 raw_ptr 多出 4168B,這多出來的就是使用智能指針的開銷。
目前來看,智能指針額外占用了一倍的程序空間。它們之間的關系是呈倍數增長,還是別的一個關系?
那么引入智能指針是哪些地方的開銷呢?
大概有:
類模板 shared_ptr, weak_ptr 為每個類型生成的類。
代碼邏輯中對智能指針的操作。
第一項是可預算的,有多少個類,其占用的空間是可預知的。而第二項,是很不好把控,對指針對象訪問越多越占空間。
總結:
使用智能指針的代價會使程序的體積多出一半。
“C++智能指針對程序文件大小有什么影響”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。