1 代码区

存放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。

总结:你所写的所有代码都会放入到代码区中,代码区的特点是共享和只读。

2 全局区

全局区中主要存放的数据有:全局变量、静态变量、常量(如字符串常量)

全局区的叫法有很多:全局区、静态区、数据区、全局静态区、静态全局区

这部分可以细分为data区和bss区

2.1 data区

data区里主要存放的是已经初始化的全局变量、静态变量和常量

2.2 bss区

bss区主要存放的是未初始化的全局变量、静态变量,这些未初始化的数据在程序执行前会自动被系统初始化为0或者NULL

2.3 常量区

常量区是全局区中划分的一个小区域,里面存放的是常量,如const修饰的全局变量、字符串常量等

在VS下运行结果如下:

在程序运行后由产生了两个区域,栈区和堆区

3 栈区(stack)

栈是一种先进后出的内存结构,由编译器自动分配释放,存放函数的参数值、返回值、局部变量等。在程序运行过程中实时加载和释放,因此,局部变量的生存周期为申请到释放该段栈空间。

vs运行效果如下

4 堆区(heap)

堆是一个大容器,它的容量要远远大于栈,但没有栈那样先进后出的顺序。用于动态内存分配。堆在内存中位于BSS区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。

vs运行效果如下:

AppWizard has created this CalcModule DLL for you. This file contains a summary of what you will find in each of the files that make up your CalcModule application. CalcModule.dsp This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the project (.dsp) file, but they should export the makefiles locally. CalcModule.cpp This is the main DLL source file. When created, this DLL does not export any symbols. As a result, it will not produce a .lib file when it is built. If you wish this project to be a project dependency of some other project, you will either need to add code to export some symbols from the DLL so that an export library will be produced, or you can check the "doesn't produce lib" checkbox in the Linker settings page for this project. vs 2019 使用 函数指针时编译出现了“ 使用 了可能 初始化 的本地指针 变量 ” ? /********************************************************* * 文件名:MyCalc.h * 作者:WartenSIE * 时间:2021-11-13 * 描述:加减乘除运算实现 函数指针实现 * 邮箱:wartensie123@163.com *********************************** 来源:公众号【编程珠玑】作者:守望先生前言什么是 初始化 ?为什么要 初始化 ?静态 变量 和局部 变量 初始化 又有什么区别?实际应用 应该怎么做?本文将一一回答这些问题。什么是 初始化 初始化 指的是对数据对象或者 变量 赋予初始值。例如:intvalue=8;//声明整型 变量 初始化 为8intarr[]={1,2,3};//声明整型数组arr,并 初始化 其值为1,2,3为什么要 初始化 我们来看一... 从 VS 2012创建项目时,会有一个勾选项,叫做“安全开发生命周期(SDL)检查”,这个东西是微软在 VS 2012新推出的东西,为了是能更好的监管开发者的代码安全,如果勾选上这一项,那么他将严 字符常量是由一对单撇号括起来的单个字符,如 ‘a’、‘C’、‘?’,‘$’。在C语言 ,除了字符常量还有字符串常量以及字符串 变量 ,先来讲一下字符串常量的个人理解:(1)常量本质在于不可更改,而字符串常量是就是一对双引号括起来的字符序列常量。例如“hello word”C语言 规定,在每一个字符串常量的结尾,系统都会自动加一个字符’0’作为结束标志符。而‘0’在ascii码 为0字符,不起任何控制作... 1 内存 分区模型 C++ 程序在执行时,将 内存 大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局 变量 和静态 变量 以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部 变量 等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 内存 四区 意义:不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程1.1 程序运行前​ 在程序编译后,生成了e... 在网上搜索了很多病毒木马的分析报告,看了一段时间后,发现还是有很多病毒木马都能够模拟PE加载器,把DLL或者是EXE等PE文件,直接从 内存 直接加载到自己的 内存 执行,不需要通过API函数去操作,以此躲过一些杀软的检测。 程序实现原理 首先,在EXE文件 ,根据PE结构格式获取其加载映像的大小SizeOfImage,并根据SizeOfImage在自己的程序 申请一块可读、可写、可执行的 内存 ,那么这块 内存 的首地址就是EXE程序的加载基址 然后,根据EXE 的PE结构格式获取其映像对齐大小Section LoadLibrary("xxxx.dll") // 宏函数 依据项目定义字符格式决定函数版本 LoadLibraryA("xxxx.dll")// 窄字符版本 LoadLibraryW("xxxx.dll")// 宽字. GNU编译器生成的目标文件默认格式为elf(executive linked file)格式,这是Linux系统所采用的可执行链接文件的通用文件格式。elf格式由若干个段(section)组成,由标准c源代码生成的目标文件 包含以下段:       .text(正文段)包含程序的指令代码,       .data(数据段)包含固定的数据,如常量,