对C程序的存储空间布局的初识

简介: 今天在老师的指引下我考虑了C语言的存储空间布局,才深深的感到了自己是个小白,什么也不懂,或许那句话“程序员为啥会犯错误,不是因为他不懂什么而是因为觉得自己都懂。”

今天在老师的指引下我考虑了C语言的存储空间布局,才深深的感到了自己是个小白,什么也不懂,或许那句话“程序员为啥会犯错误,不是因为他不懂什么而是因为觉得自己都懂。”


正文:

之所以在C中能自如的调用函数那都是因为栈(stack)的存在,在栈中保存着函数调用的场景信息,这句话是书上的,我是这么理解的,这些场景信息也就是包括函数的入口地址,形参,函数的返回值,以及一些寄存器的值。栈是自动分配内存的。


C语言的存储空间从高地址到低地址依次是:

命令行参数和环境变量:

栈:

堆:

非初始化数据段:未初始化的全局变量和静态变量

初始化数据段:已经初始化的全局变量和静态变量

正文段:程序就在这里


此外小知识点我还要捡起来:

printf:输出无符号整形变量 用%u

          输出十六进制  用%x


今天我学到的新名词:栈帧(未完全懂)


1.静态库libstatic.a和动态库dynamic.dll

我的认识:

2.为什么要引入段地址?

inter提出用段地址+偏移地址的方式来寻址,这是为了让CPU能访问更多的内存,如果有偏移地址的话,可用的最大内存只有64KB,也就是说:

段地址存在最初意义是为了隔离。

目录
相关文章
|
编译器 Linux C语言
函数栈帧的创建和销毁(以C语言代码为例,汇编代码的角度分析)(上)
函数栈帧的创建和销毁(以C语言代码为例,汇编代码的角度分析)
|
3月前
|
存储 编译器 C语言
C语言:文件缓冲区刷新方式有几种
C语言中文件缓冲区的刷新方式主要包括三种:自动刷新(如遇到换行符或缓冲区满)、显式调用 fflush() 函数强制刷新、以及关闭文件时自动刷新。这些方法确保数据及时写入文件。
|
4月前
|
存储 缓存 程序员
c语言的存储类型-存储类
本文详细介绍了C语言中的存储类型及其分类,包括基本类型(如整型、浮点型)和复合类型(如数组、结构体)。重点讲解了不同存储类别(`auto`、`static`、`register`、`extern`、`typedef`、`volatile`、`const`)的特点及应用场景,并展示了C11/C99引入的新关键字(如`_Alignas`、`_Atomic`等)。通过示例代码解释了每个存储类别的具体用法,帮助读者更好地理解和运用这些概念。
|
8月前
|
存储 C语言
C语言动态存储方式与静态存储方式
C语言动态存储方式与静态存储方式
140 0
|
程序员 编译器 C语言
C语言指针理解 --- 代码配合图形讲解内存四区
C语言指针理解 --- 代码配合图形讲解内存四区
89 0
|
编译器 程序员 C语言
C语言第一弹-VS源文件的创建
C语言第一弹-VS源文件的创建
|
编译器 C语言
函数栈帧的创建和销毁(以C语言代码为例,汇编代码的角度分析)(下)
函数栈帧的创建和销毁(以C语言代码为例,汇编代码的角度分析)
|
存储 程序员 编译器
C语言内存分区(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)
C语言内存分区(堆,栈,全局/静态存储区,自由存储区,代码区)与可执行程序的三段-(Text段,Date段,Bss段)
285 0
|
存储 编译器 芯片
IAR编译器如何节省代码占用的flash空间?
IAR编译器如何节省代码占用的flash空间
|
C语言 索引
【C 语言】文件操作 ( ftell 函数 | 使用 ftell 函数获取当前指针位置 | 通过 ftell 计算文件大小 )
【C 语言】文件操作 ( ftell 函数 | 使用 ftell 函数获取当前指针位置 | 通过 ftell 计算文件大小 )
442 0
【C 语言】文件操作 ( ftell 函数 | 使用 ftell 函数获取当前指针位置 | 通过 ftell 计算文件大小 )

热门文章

最新文章