数据段,代码段以及代码在程序中的运行(c语言纯概念版)

在冯诺依曼体系中,一个进程必须有代码段,数据段,堆栈段。
我们着重分析理解代码段与数据段
1.代码段,代码段就是程序的可执行部分(存放可执行代码的一块内存区域),其中包含各种堆叠的函数,也有可能包含一些常数变量,如字符串常量。其大小在程序运行前就已经确定,内存空间通常为只读。
2.数据段,通常是指用来存放程序中已初始化(未被初始化为0)的全局变量和静态局部变量的一块内存区域。数据段属于静态内存分配。
知道了这些,那我们会发现一个问题,const修饰的常变量应该存放在数据段还是代码段呢?
很明显,*代码段通常是只读,故const int a 这样的常量(可以通过指针修改,具体不过多阐述)是放在数据段的。
那么我们再思考一个问题,一个程序是怎么跑起来的呢,显然需要通过编译,让代码被替换成机器码,这样才能被计算机认识,计算机才能帮我们干事。但是其实编译的过程很复杂,并不是我们想象中那么简单,真实是分为4个步骤,分别是
1预处理(#修饰的include,define等等)
2编译(语法转换)
3汇编(转二进制机器码
4链接(组装多个代码文件)
可见这是一件相当复杂的事情。
那么递归函数要走多少遍代码呢,其实每次递归函数被调用都要在栈上开辟一段空间,即代码被跑了n次,故完成一次递归所需要大量空间,可能导致栈溢出,因此对于古老的c语言,应该少用递归算法。
 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值