扫盲回帖系列之1——栈的疑问

【刷题总结】栈系列问题 文章目录一、算法介绍二、解题模板1、栈的实现2、栈的API3、深度优先4、单调栈问题三、栈系列问题1、栈的基础特征(1)设计题,用来实现其他结构(2)利用栈的基础特征2、括号&表达式运算&退格问题(1)括号匹配问题(2)表达式运算问题(3)退格问题3、单调栈4、树的遍历-深度优先5、图的遍历-深度优先 一、算法介绍 栈:后入先出 栈系列问题:https://leetcode-cn.com/tag/stack/problemset/ 栈的典型问题 设计题 括号、表达式运算、字符串 阅读详情

       看到一个提问帖子(http://bbs.youkuaiyun.com/topics/390930552),问题摘录如下:

--------------------------------------------------------------------------------

例如函数调用的时候会在栈中为函数开辟一段空间,函数的参数也会挨个入栈,函数调用结束,会平衡栈,释放空间。
函数的局部变量也会压入栈中。
这里说的栈,应该是不是数据结构中的栈吧?指的是操作系统在内存中的一段区域?
经常会看到这么一句话“栈由系统自动分配,速度较快。”那么,
为什么操作系统或者开发操作系统的人要选择使用栈来管理呢?为什么不使用其他方式(数据结构?)?
是因为栈是向下扩展,利于判断是否溢出吗? 有没有别的理由?

--------------------------------------------------------------------------------------

        直觉印象:涉及到基本概念!但平时并没有对这些基本概念进行整理,所以要回答真要组织思路。蜻蜓点水似的回答对自己和别人都未必负责。说不定贴主的疑问恰恰就是来自一些比较模糊或似是而非说明导致的。所以看起来贴主是一个喜欢认真思考的人,尽管从贴主提的问题之间的逻辑连贯性来看,还有些混沌。

        正因为贴主的问题的混沌特点,我只能自行揣摩贴主真正的疑问,并整理一下,按我自己的思路来回答。

        首先,栈并不一定意味着向下扩展,也有向上扩展的栈。

        其次:实际上,就单个函数而言,函数参数以及局部变量放在栈中,并不主要是利用栈的后进先出的特点。函数参数以及局部变量(注意其实是局部自动变量,不包括局部静态变量,尽管局部静态变量大小也是固定的)最大的特点是编译时占用空间的确定性,因为确定,所以编译器(注意这里是编译器,不是模糊的“系统”)可以帮程序员来管理(或者说维护)这些空间,而且这种管理(或维护)的成本很低,基本上简单操纵栈指针就能实现。但是,设想一个任务或线程运行时的动态图景:主函数A调用B函数,B调用C函数,C函数返回到B,B再调用D函数……,这个动态调用链路上的每个函数的“活动记录”(就是前面提到的该函数的参数及局部变量),确符合标准的数据结构栈定义特点:C函数的活动记录作为最后入栈的,须先出(释放),然后才谈得上访问更早入栈的B函数的活动记录,道理以此类推。

        第三,如前面“其次”中提到的,栈的管理或者说栈的使用、维护者其实是编译器(为讨论简化,不考虑手工使用栈的汇编程序情形)。对操作系统而言,主要是在任务或线程的初始化期间,初始化栈的指针,如果CPU硬件提供足够支持,操作系统也能捕获栈的溢出,若真的捕获到,一般操作系统认为这是一个任务或线程自身并未意识到的重大错误,并极有可能终止任务或线程的执行,此终止行为基本上是不受任务或线程自身控制的。与此相对的是,堆空间一般很大,即使用光,任务或线程一般自己知道,所以会在任务或线程控制下选择妥善的方式来处理这个问题。

        第四,编程实用建议。一般来说,由于任务或线程的函数调用链条并不太长(层次很深的递归函数调用除外),并且函数活动记录并不大的特点,一个任务或线程的栈空间是不大的。所以建议在栈上不要放置大的数组(即声明很大的局部数组变量),否则:幸运的话是编译器会提示你,不幸运的话,造成堆栈溢出运行时遭操作系统强行终止,或者更不幸,操作系统不能检测到堆栈溢出,导致程序运行出现奇怪的错误。关于堆栈大小多说两句:一般任务或线程的堆栈大小是可以由程序初始化时来设置,包含线程的进程的总堆栈大小一般也可以在链接时指定,但这些设定都是在应用发布给客户前就固化了下来,所以基本上不要指望客户拿到你的应用之后根据实际情况来调整堆栈大小(尽管理论上客户是有办法修改堆栈空间大小),本质上,堆栈大小是一个应该由开发人员在应用发布之前(经内部测试来)确定的事情。

文件流序列化 delphi 序列化 文件流 立即下载

相关推荐

【STM32】H743的25MHZ外部晶振下480MHz时钟的CubeMX配置图

备忘 有时候临时调一个外设做实验需要快速搭建工程的时候,老忘记配置的数据 再补一段代码格式的 void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; /** Supply configuration up

一只爱做笔记的码农 3395

二进制流“69”不包含有效的 BinaryHeader

在进行序列化与反序列化的时候,程序出错了: “二进制流“69”不包含有效的 BinaryHeader。这可能是由于无效流,或由于在序列化和反序列化之间的对象版本更改。” ///     /// 对接收到或待发送数组做序列化与反序列化的类     ///     public class BufferHelper     {         ///         ///

zhyh3737的专栏 9566

奇迹MU单机版开服全流程:从零搭建到分辨率调整(附GM工具使用技巧)

本文详细介绍了奇迹MU单机版从零搭建到分辨率调整的完整流程,包括环境配置、服务端启动、GM工具使用技巧等关键步骤。特别针对现代高分辨率显示器提供了优化方案,帮助玩家轻松搭建个性化游戏环境,重温经典MMORPG的独特魅力。

b3n4m5q6w7的博客 679

网络编程问题小结

在C#网络编程中,遇到几处小错误,希望能对各位有帮助! 问题1:在使用序列化生成内存流,然后从内存流中取出byte型数组之前,需要将内存流中的Position设置为初始值(0)。不然会读取为空字节。这样接受方在进行反序列化时会报出字节中BinaryHeader无效等错误。 问题2:在反序列化之前也需要先将内存流的Position设置为从头开始,不然会报出在分析完成之前就遇到流结尾 设置内存流

Alexander_Frank的博客 1353

得物APP破解

本文介绍了得物App(版本4.74.5)的逆向破解过程,重点分析了绕过强制更新、抓包技巧以及破解newSign参数的详细方法。首先通过断网再联网的方式绕过强制更新,然后使用SocksDroid进行抓包分析,发现首页推荐接口需要newSign参数。通过反编译定位到RequestUtils.c方法,利用Frida进行Hook验证,最终解析出newSign的生成逻辑:将请求参数加入固定字段后排序拼接,再进行MD5加密生成签名。文中提供了完整的Hook脚本和签名算法分析,仅供学习移动安全技术参考。

m0_74653634的博客 3483

zynq+ad9361 petalinux使用官方IIO示波器调试记录

1ad9361 iio示波器

Yetob的博客 7991

扫盲回帖系列之2——操作系统的疑问

原始提问帖见。摘录如下:

binaryhead的专栏 1124

pycharm报错cannot start the IED:Error occurred during initialization of VMagent library failed...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1925

【扫盲系列】网络术语

一、 论坛日常用语: 1 、 BBS : ① Bulletin Board System 的缩写,指电子公告板系统,国内统称论坛。 ② 波霸, Big-Breasted Sister 的缩写。 2 、版主:版主,也可写作板猪、斑竹。由于拼音输入造

Felk 2万+

【测开求职】面试题:数据结构 吐血整理

本篇文章是笔者为准备研究生复试以及校招而写,因此主要针对问答,注重理解,而不在于细节计算。涵盖考研范围内的所有知识内容,读者可以先查看上面的链接走一遍数据结构的整体框架结构。其中,重点难点以及易混淆的知识点,笔者用其他近30篇文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 7065

RT-DETR目标检测模型性能评价指标详解,涉及混淆矩阵、F1-Score、IoU、mAP、参数量、计算量等,一文打尽所有评价指标

本文主要讲解的是计算机视觉网络模型的性能评价指标,这是每一篇论文中都需要展示的内容。熟悉每一个评价指标也能够帮助我们在训练和改进模型过程中,更好的观察模型的变化效果。

Limiiiing的博客 3358

扫盲回帖系列之3——在windows下编译生成的程序为什么不能在ubuntu下运行呢?

 原始提问帖见http://bbs.youkuaiyun.com/topics/390931945。 基本概念问题。不讨论可执行脚本情况,因为脚本不是由机器码构成,脚本在脚本解释器上运行,而解释器本身实现在不同谱系的操作系统(如Linux和Windows,不指同一种操作系统的不同版本情况,下同)上需要移植,解释器在同一操作系统的不同CPU上至少需要重新编译源码。 同样的硬件...

binaryhead的专栏 2578

基于Simulink的永磁同步电机三闭环(位置/速度/电流)控制仿真

本文详细介绍了基于Simulink的永磁同步电机三闭环控制系统设计与实现方法。系统采用位置环、速度环、电流环的三层嵌套结构,通过坐标变换(Clark/Park)实现解耦控制,达到精密定位目的。文章包含完整的建模步骤:从主电路搭建、三环PID设计到坐标变换与SVPWM调制实现,并提供了核心控制算法的MATLAB代码。通过工业机械臂关节场景验证,系统在阶跃响应(稳态误差0.002°)、正弦跟踪(误差0.008°)和抗扰动性能(恢复时间0.05s)方面表现优异。最后还提出了前馈补偿、扰动观测器等优化方向。该方案适

xiaoheshang_123的博客 280

网络术语扫盲帖

一、论坛日常用语:1、BBS:①Bulletin Board System的缩写,指电子公告板系统,国内统称论坛。②波霸,Big-Breasted Sister的缩写。2、版主:版主,也可写作板猪。由于拼音输入造成的美妙谐音。副版主叫“板斧”。3、马甲:注册会员又注册了其他的名字,这些名字统称为马甲,与马甲相对的是主ID。例句:青眉建议版主进行版务管理时,不可以用马甲发言。4、菜鸟:原

狂※痴(zhangleixp) 3040

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

经典网络术语大扫盲

 一、论坛日常用语:  1、BBS:①Bulletin Board System的缩写,指电子公告板系统,国内统称论坛。②波霸,Big-Breasted Sister的缩写。   2、版主:版主,也可写作板猪、斑竹。由于拼音输入造成的美妙谐音。副版主叫“板斧”。   3、马甲:注册会员又注册了其他的名字,这些名字统称为马甲,与马甲相对的是主ID。   4、菜鸟:原指电脑水平比较低的人,后来广泛

JINGWUMEN22的专栏 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

网络用语大扫盲?今天 你说了没?

网络用语?论坛词汇: 论坛日常用语: 1、BBS:①BulletinBoardSystem的缩写,指电子公告板系统,国内统称论坛。②波霸,Big-BreastedSister的缩写。 2、斑竹:版主,也可写作板猪。由于拼音输入造成的美妙谐音。副版主叫“板斧”。 3、马甲:...

chiguangte1545的博客 994

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

网络术语大扫盲2007版

一、论坛日常用语:1、BBS:①Bulletin Board System的缩写,指电子公告板系统,国内统称论坛。②波霸,Big-Breasted Sister的缩写。 2、版主:版主,也可写作板猪、斑竹。由于拼音输入造成的美妙谐音。副版主叫“板斧”。 3、马甲:注册会员又注册了其他的名字,这些名字统称为马甲,与马甲相对的是主ID。 4、菜鸟:原指电脑水平比较低的人,后来广泛运用于现实生活中,

1930

软件漏洞分析入门3

导读:   第3讲 初级栈溢出B   To be the apostrophe which changed “Impossible” into “I’m possible”   —— failwest   小荷才露尖尖角   扫盲班第三讲开课啦!   上节课我们用越过数组边界的一个字节把邻接的标志变量修改成0,从而突破了密码验证程序。您实验成功了吗?没...

weixin_33971130的博客 77

软件漏洞分析入门_3_初级栈溢出B_系统栈原理

第3讲  初级栈溢出BTo be the apostrophe which changed “Impossible” into “I’m possible”—— failwest小荷才露尖尖角扫盲班第三讲开课啦!上节课我们用越过数组边界的一个字节把邻接的标志变量修改成0,从而突破了密码验证程序。您实验成功了吗?没有的话回去做完实验在来听今天的课!有几个同学反映编译器的问题,我还是建议用VC6.0,

1124

装修知识ABC

 装修知识问答_参考答案 yylbbs回帖选之三<2005年1-9月>欧美阁张工回帖选<2004年度>欧美阁张工回帖选<2005年1月至8月>装修大学扫盲教材之二<地板的知识>装修大学扫盲教材之一,砖的知识 <马桶的选择>yylbbs回帖选<2>★★教你一招儿★★ 欧美阁装饰张工《初稿》]★★yylbbs回帖选★★橱柜材料的选择《装修知识ABC之三十二》装修应当怎样理财<装修知识A

爱莎可实验室 1876
上一篇: 对一个简单数学问题的浮想
下一篇: 扫盲回帖系列之2——操作系统的疑问
二进制脑袋
博客等级 码龄25年 25粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值