这篇文章上次修改于 1229 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
title: "c++.MD"
author: "andy"
description: "description information"
date: "2016-09-28"
lastmod: "2023-11-28"
内存分配,堆栈
class 的成员变量的存储在堆上还是栈上,取决于class的对象创建在堆上还是栈上
string 对象内部约定字符串字面量小于上表的阀值(15BYTE),分配在栈上,否在在堆上创建
vector 这个对象存在栈中,肯定是堆,只有堆能动态分配内存
函数模板
typename 参数自动分展开,析出
std::forword 参数转发
OTHER
为什么在处理“Hello,Word!!”只在栈中进行内存分配?
为什么在处理“Hello,My name is peter!!”这样的字符串,就会在堆中进行内存分配?
string对象内部约定:
只要传入的字符串字面量小于上表的阀值,string内部实现在栈中分配内存,有个很骚的名字小型字符串优化(Small String Optimisation)。
只要大于上述C++编译器指定阀值,string对象内部会隐式执行new操作在堆中根据指定的字符串尺寸分配初次内存。
如果后续任何字符串的push_back操作,string会根据“double方案”的内存分配方式对堆内存执行扩容操作,见前文《对[C/C++]指针与字符串的总结》。
还有根据RAII的约定,C++编译器会对string对象在其调用函数的生命周期结束之时自动执行垃圾回收。(见上图的输出)。
没有评论
博主关闭了评论...