程序运行中有两个存储空间可用,一个是栈,是归属于进程本身的,另外一个是堆,所有进程共用的。局部变量存放在栈中,而全局变量则放在堆中。
局部变量,如果是基本数据类型,那么就直接存在栈中,如果是应用数据类型,比如String str = new String("12");,会把对象存在堆中,对象的引用(指针)存在栈中。
成员变量,类的成员在不同对象中各不相同,基本数据类型和引用数据类型都存储在这个对象中,作为一个整体存储在堆中。
void ConfigINI::setStringValueWithIndex(const char *index, const char* name, const char* value)
{
ConfigINIEntry entry;
entry.index = index;
entry.name = name;
entry.value = value;
if(datas.size() == 0) {
datas.push_back(entry); //entry存在于堆中,所以可以直接推进列表中。
return;
}
}
栈分配的软件优势:栈分配算法简单,所以高效;堆分配算法相对比较复杂。栈分配的硬件优势:cache和内存映射。如果在栈上分配小块内存,因为cache和内存映射已经建立,则效率会非常高,远远优于堆分配。
堆在分配和释放时都要调用函数(MALLOC,FREE),比如分配时会到堆空间去寻找足够大小的空间(因为多次分配释放后会造成碎片)。
能够存在于栈中的变量,就不要放到堆中。
C语言的堆与栈
最新推荐文章于 2024-07-21 14:03:27 发布