网站建设的行业代码是多少,做二手机网站,私域流量管理工具,建设网站的流程可分为哪几个阶段使用std::make_shared相比于直接使用new和std::shared_ptr构造函数在内存分配和管理方面更为高效#xff0c;主要原因如下#xff1a;
内存分配效率
std::make_shared通过一次内存分配来同时分配控制块#xff08;用于引用计数等#xff09;和对象的内存。这种方式减少了…使用std::make_shared相比于直接使用new和std::shared_ptr构造函数在内存分配和管理方面更为高效主要原因如下
内存分配效率
std::make_shared通过一次内存分配来同时分配控制块用于引用计数等和对象的内存。这种方式减少了内存分配的次数提高了效率。
auto sp std::make_sharedint(10);
这里std::make_shared一次性分配了包含控制块和int对象的内存。
直接使用new和std::shared_ptr构造函数
直接使用new和std::shared_ptr构造函数通常需要进行两次内存分配一次用于对象本身另一次用于控制块。
std::shared_ptrint sp(new int(10));
这里new int(10)分配了对象的内存然后std::shared_ptr构造函数再分配控制块的内存。
内存局部性
由于std::make_shared将对象和控制块分配在一起这些内存通常是连续的能够更好地利用CPU缓存提高程序的运行效率。
异常安全性
使用std::make_shared能够确保在对象构造期间如果抛出异常不会导致内存泄漏。因为对象和控制块的内存是在一次操作中分配的如果构造对象时抛出异常分配的内存会自动释放。
auto sp std::make_sharedint(10); // 如果在构造int对象时抛出异常内存会被自动释放
而使用new和std::shared_ptr构造函数时如果在对象构造期间抛出异常可能会导致内存泄漏因为new分配的内存不会被自动释放。
std::shared_ptrint sp(new int(10)); // 如果在构造int对象时抛出异常new分配的内存不会被自动释放
总结
std::make_shared在内存分配和管理方面更为高效的原因包括
通过一次内存分配同时分配控制块和对象的内存减少了内存分配的次数。更好的内存局部性能够更有效地利用CPU缓存。提供更好的异常安全性防止在对象构造期间发生异常时导致的内存泄漏。