加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C一些堆栈问题

发布时间:2020-12-16 10:29:33 所属栏目:百科 来源:网络整理
导读:首先我要说的是我已阅读 this tutorial并已阅读 this question.我的问题是: 筹码有多大?是吗 处理器/架构/编译器 依赖? 有没有办法确切知道如何 我有很多记忆 函数/类堆栈和多少 目前正在使用 避免溢出? 使用现代编译器(比如gcc 4.5) 在现代计算机上(比
首先我要说的是我已阅读 this tutorial并已阅读 this question.我的问题是:

>筹码有多大?是吗
处理器/架构/编译器
依赖?
>有没有办法确切知道如何
我有很多记忆
函数/类堆栈和多少
目前正在使用
避免溢出?
>使用现代编译器(比如gcc 4.5)
在现代计算机上(比如6 GB ram),
我需要担心堆栈吗?
溢出或是它的一部分
过去?
>是实际的堆栈内存
物理上在RAM或CPU缓存上?
>堆栈内存要快多少
访问和读取与堆相比
访问和阅读?我意识到了
时间是PC特定的,所以比例是
足够.
>我读过这是不可取的
分配大变量/对象
堆.太大了多少钱? This
question here给出了答案
win32中的一个线程为1MB.怎么样
关于Linux amd64中的一个线程?

如果已经提出并回答了这些问题我很抱歉,欢迎任何链接!

解决方法

>是的,堆栈大小的限制会有所不同,但如果你关心你可能做错了什么. >一般情况下,您无法获得有关程序可用内存量的信息.即使您可以获得此类信息,在使用之前通常也会过时. >如果您共享跨线程数据的访问权限,那么您通常需要序列化访问权限,除非它们是严格只读的. >您可以将堆栈分配的对象的地址传递给另一个线程,在这种情况下,您(再次)必须序列化,除非访问严格是只读的. >即使在具有大量内存的现代机器上,您当然也可以溢出堆栈.堆栈通常仅限于总存储器的相当小的一部分(例如,4MB). >堆栈被分配为系统内存,但通常使用得足以使任何给定时间至少首页或两个通常位于缓存中. >作为堆栈与堆的一部分对访问速度没有直接影响 – 两者通常位于相同的内存芯片中,甚至通常位于同一内存芯片中的不同地址.主要区别在于堆栈通常是连续的并且使用频繁,前几页几乎总是在缓存中.基于堆的内存通常是碎片化的,因此需要更多的机会来获取不在缓存中的数据. >对于应在堆栈上分配的对象的最大大小,几乎没有变化.即使堆栈可能更大,也没有理由在那里分配大型对象. >避免C中内存泄漏的主要方法是RAII(AKA SBRM,基于堆栈的资源管理). >智能指针本身就是一个很大的主题,Boost提供了几种.根据我的经验,集合会产生更大的差异,但基本思想在很大程度上是相同的:减轻程序员在特定对象可以使用或应该被释放时跟踪每种情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读