C++的一些基本概念

一些问题,与你商榷,从你的发言看,对于堆和栈你恰恰搞反了,你提到

“使用new会在堆栈上分配”
——确切的说是堆(heap)上(当然重载new的行为者不一定)

“而直接声明变量会在堆上分配”
——全局域(如任何函数、类外定义的变量)和静态变量(如有static指示符的)分配(确切的说是映射)在静态存储区(大致可以认为和可执行代码运行时内存区域相当),动态分配发生在堆(heap)上(前提是没有重载new等分配操作符),局部变量在栈(stack)上分配

“堆比较小,而栈大”
——这么说有点没谱,大小不是堆和栈的区别,一般而言栈大小确定,栈一旦建立大小就固定了,因此会发生溢出,而堆则可以随时向操作系统申请更多,

“对于一些比较庞大的类对象,一般都要在堆栈上分配”
——由上一点可知,应该是“对于一些比较庞大的类对象,一般都要在堆而不是在栈上分配”

“堆栈的性能逊于堆的性能,小对象例如int阿什么的都是直接在堆上生成”
——本质上没什么性能差异,最多也就是由于堆上的内存总是只能通过指针和引用来访问,需要多做一次内存寻址而已

“每个线程有自己的独立的堆和栈。全局变量在公共堆上生成,所以不安全。而对线程独立的堆和栈,都是线程安全,互不相干的。”
——安全不安全全看该对象是否是“临界资源”(参看操作系统书籍),而不论是在哪里分配的,小明兄的一句话至为妥当:“其实不管在stack还是heap,说到底也不果是一个普通的内存地址,没特殊的地方,只要是多个thread不加锁的读写都会引起性能问题。”,当然小明兄所指“性能问题”肯定是笔误,我想他指的是“安全问题” 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值