大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇内容介绍了“C++智能指针对程序文件大小有什么影响”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、成都做网站、永定网络推广、小程序定制开发、永定网络营销、永定企业策划、永定品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供永定建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
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++智能指针对程序文件大小有什么影响”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!