建音乐网站网站备案说明
news/
2025/10/5 18:53:09/
文章来源:
建音乐网站,网站备案说明,sem和seo是什么意思,网站运营策划字符串优化
小字符会优化为栈上#xff0c;长度大于15才会堆声明#xff08;带上终止符16#xff09;
在各种实际应用中#xff0c;使用字符串的场景不在少数#xff0c;总有由于一些错误的代码书写#xff0c;导致产生性能问题#xff0c;我们今天学习一种针对字符串…字符串优化
小字符会优化为栈上长度大于15才会堆声明带上终止符16
在各种实际应用中使用字符串的场景不在少数总有由于一些错误的代码书写导致产生性能问题我们今天学习一种针对字符串视图的优化方法在展示方法之前先看一下普通情况产生内存分配的情况。
static int s_malloc 0;void* operator new(size_t size) {s_malloc;std::cout allocate size \n;return malloc(size);
}
void PrintName(const std::string name) {std::cout name std::endl;
}
int main() {std::string name LHXJLHX;std::string firstName name.substr(0,3);std::string lastName name.substr(4, 6); PrintName(name);
}
在这段代码中重写了内存分配的方法使其产生内存分配的时候静态变量就会1依次来观察内存分配的次数。在这段代码中产生了三次内存分配。我们使用string_view对此进行优化。
void PrintName(std::string_view name) {std::cout name std::endl;
}const char* name LHXJLHX;std::string_view(name, 3);std::string_view(name 4, 6);使用上述方法可以将内存分配次数减少到0次。除了string_view的原因以外我们还将重新复习一下const char*和std::string的区别
const char*:当使用const char*时通常都是编译时分配的不是在运行时动态分配的是一个常量不能修改大小。大小只包括了指针的大小。
std::string:std::string是一个类内部管理一个动态分配的字符数组当改变内容时其就会重新分配内存以适应新的大小这使得其更加灵活但是也需要更多的内存开销。大小上还包括了字符串长度以及容量之类的信息。
单例模式
class Singleton {
public:Singleton(const Singleton) delete;static Singleton Get() {std::cout get std::endl;return s_Instance;}float Function() {
//如果不想在主函数中频繁调用get方法可将get方法调用实例写在此处return m_Member;}
private:Singleton() {}float m_Member 0.0f;static Singleton s_Instance;
};
int main() {Singleton instance Singleton::Get();Singleton::Get().Function();
} 为了防止重复声明新的单例类进行类成员的声明用于禁止类的拷贝构造对象。 C11标准引入的一个特性用于禁止编译器生成某些函数的默认版本或者用于禁止用户定义的函数。通过将拷贝构造函数设置为 delete你告诉编译器不生成这个函数的默认版本因此禁止了使用一个已存在的 Singleton 对象来创建一个新的 Singleton 对象。 同样可以通过Singleton operator(const Singleton) delete;显式删除了拷贝赋值操作符。拷贝赋值操作符是用于将一个对象的值赋给另一个同类型对象的操作符。同样地通过将拷贝赋值操作符设置为 delete你禁止了将一个 Singleton 对象的值赋给另一个 Singleton 对象。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928602.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!