程序运行中(BSS段、数据段、代码段、堆栈)

程序运行中(BSS段、数据段、代码段、堆栈)

BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。

数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域。数据段属于静态内存分配。

代码段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于 只读 , 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些 只读的常数变量 ,例如字符串常量等。程序段为程序代码在内存中的映射.一个程序可以在内存中多有个副本.

堆(heap) :堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc/free等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张)/释放的内存从堆中被剔除(堆被缩减)

栈(stack) :栈又称堆栈, 存放程序的 局部变量 (但不包括static声明的变量, static 意味着 在数据段中 存放变量)。除此以外,在函数被调用时,栈用来传递参数和返回值。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。储动态内存分配,需要程序员手工分配,手工释放

时间: 2024-10-24 06:49:16

程序运行中(BSS段、数据段、代码段、堆栈)的相关文章

C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)

BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域.数据段属于静态内存分配. 代码段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域.这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于 

栈帧 --- 程序运行中数据的更改问题

一.栈 栈作为一种特殊的数据结构而存在("后入先出"存储),是一种只能在一端进行插入和删除操作的特殊线性表. 大多数CPU上的程序实现使用栈来支持函数调用操作.栈用来传递函数参数.存储返回信息.临时保存寄存器原有值以用于回复以及存储局部数据. 栈有很多自己的特性,它具有记忆功能,对栈的插入与删除操作中,不需要改变栈底指针:而且栈是从高地址向低地址延伸的.每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息.因此栈作用就是用来保持栈帧的活动记录(即函数调用).

VS2008中代码段(Snippet)及代码段编辑

网上资源零碎,主要是整理下. 整理的是主要核心内容,完整内容可以看后面标注的原文链接. 代码段是什么 <VS2008中代码段(Snippet)的功能> 在VS2008中,提供了代码段(Snippet)的功能.  什么是代码段呢?即使你对这个词还不是很熟悉,但是极有可能的是——你已经在不知不觉中应用它了.举例:   当我们在写一个选择分支(if语句)或是循环分支(for语句)时,难道要完全手动敲完每一个字符吗?当然不会这么笨,我们只要输入“if”然后再轻按两下Tab键,if语句的经典结构就跃然纸

第二章--Win32程序运行原理 (部分概念及代码讲解)

学习<Windows程序设计>记录 概念贴士: 1. 每个进程都有赋予它自己的私有地址空间.当进程内的线程运行时,该线程仅仅能够访问属于它的进程的内存,而属于其他进程的内存被屏蔽了起来,不能被该线程访问. PS:进程A在其地址空间的0x12345678地址处能够有一个数据结构,而进程B能够在其地址空间的0x12345678处存储一个完全不同的数据.彼此不能访问. 2. 在大多数系统中,Windows将地址空间的一半(4GB的前一半,0x00000000-0x7FFFFFFF)留给进程作为私有存

VS.net中快捷键收缩和展开代码段

i. Ctrl-M-O   折叠所有方法  ii. Ctrl-M-P   展开所有方法并停止大纲显示(不可以再折叠了)  iii. Ctrl-M-M   折叠或展开当前方法  iv. Ctrl-M-L展开所有方法

python日志添加功能,主要记录程序运行中的日志,统一收集并分析

转自:https://www.cnblogs.com/jsondai/p/9663633.html 一.日志的级别 debug(调试信息) info() warning(警告信息)error(错误信息) critical(致命信息) 从左往右越来越严重 日志等级(level) 描述 DEBUG 最详细的日志信息,典型应用场景是 问题诊断 INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 WARNING 当某些不期望的事情发生时记录的信息(

java程序运行中如果出现异常未被处理,将会被抛到java虚拟机进行处理,程序中断运行后被挂起,在页面输出错误信息(不会输出到console)

下面的代码中,因为我是使用 for (Iterator<Element> i = el.elements().iterator(); i.hasNext(); ) 迭代器遍历根节点的所有子节点的flag,但是因为linux基线有 <initcmd> 节点,导致flag为空, 在传入service中进行数据库操作时抛出异常未被处理导致程序被挂起,错误信息不输出到console,直接打印到了页面. 解决方法就是try catch处理掉异常并返回false即可 public boolea

Java程序运行时六种储存数据方式

利用空余时间整理的,时间上比较匆忙 ,有什么错误的,希望大家在评论区指导一下!一起学习. 原文地址:https://www.cnblogs.com/LinJavaWeb/p/8954521.html

返回程序运行中当前行

"""This provides a lineno() function to make it easy to grab the line number that we're on. """ import inspect def lineno(): """Returns the current line number in our program.""" return inspect.c