当前位置: 首页 > wzjs >正文

五华网站建设 优帮云珠海seo排名收费

五华网站建设 优帮云,珠海seo排名收费,app要多少钱才能开发,网站建设服务费会计分录一、In-Place Construction In-Place Construction,就地构造或原地构造。它是什么意思呢?就是在最终使用 个对象的内存处直接创建对象。为什么会这样做?有什么目的?大家都知道,对C/C来说,性能在开发中是一…

一、In-Place Construction

In-Place Construction,就地构造或原地构造。它是什么意思呢?就是在最终使用 个对象的内存处直接创建对象。为什么会这样做?有什么目的?大家都知道,对C/C++来说,性能在开发中是一个重要的考量因素。在前面的一些优化的过程,都提出过各种的内存优化。比如返回值优化(RVO,NRVO),就可以减少对象的拷贝动作。而std::move和移动拷贝构造函数都可以减少临时对象的创建。
在前面分析一些STL的容器接口中,提出过尽量使用emplace_back而不使用传统的insert等,其中一个重要原因也是如此。

二、placement new

在看到前面的就地构造,会不会想起placement new操作符,在前面的分析中可以知道它可以在指定的内存上进行对象的构造,这是不是和In-Place Construction有些相通的味道。但placement new使用起来有些不方便,除了自己要搞定内存的控制外,生成对象的构造函数还需要开发者自己管理。
好,既然明白了有味道相似,那么就可以猜测到它们之间肯定存在着一些什么关系。
c++内存分配的管理中分析过,launder和start_lifetime_as

三、二者关系和应用场景

在前面的文章“c++17的launder”和“launder和start_lifetime_as”中都提到了placement new,也可以看到它们和In-Place Construction有些类似的使用方式。其实,仔细的分析会发现,In-Place Construction底层就是使用placement new来实现的。可以这样理解,In-Place Construction是上层抽象的封装应用,而placement new是底层的真正实现。举一个不太恰当的例子,正如new和 malloc的行为逻辑有些相似,new底层调用了malloc。
在很多的应的场景下,内存可能需要反复的创建和释放。这很容易产生内存碎片或严重影响效率。那么解决这类问题的前提,可以使用内存池技术;但如果想重复应用一块内存的情况下,则可以考虑使用这种placement new,为了简化和应用上的安全,进行更高层次的抽象封装,实现内存的安全管理。则可以使用In-Place Construction。
说了这些,哪些常见的情况下会有这种应用呢?
1、STL的容器操作的插入,如提到的vector等的empalce_back和empalce函数
2、内存池固定复用内存,减少动态分配的相关资源消耗,提高效率
3、延迟初始化需要在固定的内存中创建对象,包括模板中的某些参数处理等
4、自定义,可以根据开发者的特定需求进行处理,如程序中反复使用一块儿大的内存等

四、实例分析

下面看一个placement new例子:

#include <iostream>class PlacementDemo {
public:int value_;PlacementDemo(int value) : value_(value) {}void get() { std::cout << "cur value_: " << value_ << std::endl; }
};int main() {char buf[sizeof(PlacementDemo)];  void* ptr = static_cast<void*>(buf);  // placement newPlacementDemo* obj = new (ptr) PlacementDemo(1);  obj->get();  obj->~PlacementDemo();//显式调用return 0;
}

再看一个STL容器中In-Place Construction的例子:

#include <vector>
#include <string>int main() {std::vector<std::string> vec;vec.emplace_back("demo"); //  vector 的尾部内存中原地构造 std::string对象return 0;
}

大家还可以翻一翻刚刚提到的前面几篇文章,对照学习,会有更大的收获。

五、总结

技术的进步不是一朝一夕完成的,它一定是从需求出发,不断的进行完善,然后被抽象出来。无论是RVO还是各种的内存优化,当然也包括今天提到的就地构造等,它们都是对追求效率和安全的一种演进过程。不管是开发者还是设计者,都要多学习这种优秀的经验,不断的融会贯通,提高自己的整体的水平。
既要拿来主义,又要明白主义,博采众家之长,这才是学习的最终目的。

http://www.dtcms.com/wzjs/156499.html

相关文章:

  • 泉州易尔通网站建设推广竞价托管公司
  • 登录器显的窗口网站怎么做软文代写价格
  • 南山做网站的集团网站推广
  • wordpress 信息分析百度seo公司兴田德润
  • 做微商童装网站免费发布推广信息的软件
  • 广东seo网站设计价格网络整合营销是什么意思
  • 泉州网页建站模板站长统计性宝app
  • 网站排名做不上去吗郑州seo排名扣费
  • 阿里云云市场网站建设山西疫情最新情况
  • 网站手机端页面怎么做的企业网站设计
  • 企业网站设计布局方式泉州排名推广
  • 网站建设用到的工具seo网站推广建站服务商
  • 网站关键词seo优化公司重庆旅游seo整站优化
  • 武汉哪家做网站公司好cpc广告点击日结联盟
  • 公务员建设文化与道德网站2021最新免费的推广引流软件
  • 提供网站建设公司报价网站优化软件
  • wordpress页面跳舞seo快排技术教程
  • 免费单页网站在线制作上海有什么seo公司
  • 网站开发支付超时如何解决百度关键词流量查询
  • 模板网站建设乐云seo效果好小程序开发教程全集免费
  • 基于phpt漫画网站开发百度网址大全电脑版
  • 以下不属于网站建设优化长沙网站se0推广优化公司
  • 教育培训机构网站建设郑州网站排名优化外包
  • 做网站的收益免费网页在线客服制作
  • 江门城乡建设局官方网站网络seo是什么意思
  • 做军事网站的项目背景图片外包网站有哪些
  • 网站的建立过程怎么做互联网营销推广
  • 完善网站建设的目的是seo是什么意思职业
  • wordpress vip system上海seo推广
  • 手表网站官网2018十大网络营销案例