c/c++编程基础篇之浅析堆&栈

  在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

  栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。

  堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

  自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

  全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。

  常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改

时间: 2024-12-03 10:32:47

c/c++编程基础篇之浅析堆&栈的相关文章

文件系统驱动编程基础篇之1——我们的准备

一.导言 在四个月漫长的征战后,终于在国庆节的今天完成了基础篇系列.本文写作的初衷很简单,就是给平静的池水中加入一点波澜,如果大家在阅读后感受到一点生气,激起探索未知的热情,笔者也会感到由衷的喜悦. 本系列文章为业余编程爱好者而写,仅仅作为初学者的一个借鉴,真正的精华存在于参考资料*中.知识的积累将经历从薄到厚,再从厚到薄的反复过程,为了打下牢固的基础,请读者务必在阅读本文的基础上花费必要的时间完成参考资料. 二.基本架构 为了保证性能,汇编与c成为操作系统编写的首选语言,Windows家族的前

文件系统驱动编程基础篇之3——Ioctl控制操作

二.对象管理与命名空间(Namespace) 内核空间中不同类型的对象都通过对象管理器统一管理,并通过命名空间这一逻辑上的概念来组织各个对象,类似于资源管理器.Device目录存放着通过IoCreateDevice创建的各种设备对象,包括文件系统驱动下创建的卷对象.FileSystem目录存放着文件系统驱动对象和文件系统识别器设备对象(这些内容将在进阶篇叙述).更具体的描述请参看资料2. 到目前为止,我们还未讨论过用户模式下的应用程序如何与驱动程序发生交互,请暂时忘记"中断门".&qu

文件系统驱动编程基础篇之2——标准模型

二.标准模型 WDM采用了结构化的编程方式,执行效率很高,但编写效率较低,这也是DriverStudio得以发展的重要原因.正如掌握了COM原理,使用ATL才能掌握精髓的道理一样,读者需要忍受记忆大量基础知识的"痛苦",暂时放弃编写驱动程序的捷径. 下面的某些图示稍显陈旧,不过已经足以说明问题了. 尽管驱动程序分为多个种类(图1-4),但它们包含的基本内容(图1-5)是一致的.每个驱动程序都从初始化程序DriverEntry进入,通过某个派遣例程DispatchXXX派发特定命令(我们

Shell编程基础篇-上

1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容.每一个合格 的Linux系统管理员或运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅 读系统及各类软件附带的Shell脚本内容.只有这样才能提升运维人员的工作效率,适 应曰益复杂的工作环境,减少不必要的重复工作,从而为个人的职场发展奠定较好的基础 1.1.2 什么是shell

文件系统驱动编程基础篇之4——Wmi管理规范

二.WMI简介 一)基于Web的企业管理(Web-Based Enterprise Management (WBEM))的提出是为了解决企业在快速发展的过程中,总成本(Total cost of ownership(TCO)) 也随之快速增长的矛盾,它作为一项业界倡议,起始于1996年,规范了企业网络中受管资源的描述与使用.WBEM建立在通用信息模型(Common Information Model (CIM, 由Desktop Management Task Force,即DMTF推动的工业化

linux 网络编程-基础篇

#Socket简介 是一个编程接口 是一种特殊的文件描述符(everything in Unix is a file) 并不仅限于TCPIP协议 面向连接(Transmission Control Protocol - TCPIP) 无连接(User Datagram Protocol-UDP 和 Inter-Network Packet Exchange-IPX) #Socket类型 流式套接字(SOCK_STREAM) 提供了一个面向连接,可靠的数据传输服务,数据无差错,无重复的发送且 按发

Shell编程基础篇-下

1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 -f文件,f的全拼为file 文件存在且为普通文件则为真,即测试表达式成立 -e文件,e的全拼为exist 文件存在则为真,即测试表达式成立.注意区别于"-f",-e不辨别是目录还是文件 -r文件,r的全拼为read 文件存在且可读则为真,即测试表达式成立 -s文件,s的全拼为size 文件存在且文件大小不为0则为真,

Symbian编程总结-基础篇-动态缓冲区(1)-回顾HBufC

当数据尺寸在编译期不固定,而在运行期有可能要扩展到很大尺寸时,动态缓冲区在保存二进制数据方面显得非常有用.我们可以使用C++数组保存二进制数据,然后调用类似于memcpy的函数去动态的改变数组所占用空间的大小:我们还能够使用HBufC描述符,获取其可修改的描述符向其写入数据,然后调用ReAlloc方法扩展数组.以上两点方法可行,但是不好,因为我们得自己管理内存的分配.Symbian C++考虑到了这一点,于是引入了动态缓冲区的概念. 基于堆的缓冲描述符HBufC的前缀H显然不符合Symbian

Symbian编程总结-基础篇-集合与缓冲区(2)-验证RArray::Append

Symbian编程总结-基础篇-集合与缓冲区(2)-验证RArray::Append是否保存对象副本 一.验证栈对象会自动销毁 我们知道,在C++中,在函数中创建了栈对象,函数退出时,该栈对象会自动销毁(栈指针后移了,栈内存会被覆盖).如何验证这一点?我们需要在函数外定义一个整形变量,在函数内将该函数内获取了变量的地址,在函数调用完毕后,将地址还原成对象: TInt iAddr; /** * 将地址还原成描述符对象并显示出来 * @param aAddr 地址 */ LOCAL_C void P