C语言的堆与栈

程序运行中有两个存储空间可用,一个是栈,是归属于进程本身的,另外一个是堆,所有进程共用的。局部变量存放在栈中,而全局变量则放在堆中。
局部变量,如果是基本数据类型,那么就直接存在栈中,如果是应用数据类型,比如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),比如分配时会到堆空间去寻找足够大小的空间(因为多次分配释放后会造成碎片)。
能够存在于栈中的变量,就不要放到堆中。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

草根大哥

进军大神程序员路上,谢谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值