Expert C Programming 总结(三)

本文探讨了编程中的全局变量使用原则、代码与数据的区别、Unix中的段概念、虚拟地址空间的特点以及运行时数据结构如堆栈、活动记录等的作用。此外,还详细介绍了函数调用过程中堆栈的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


   1. 准则:不要让程序中的任何符号成为全局的,除非有意把它们作为程序的接口之一。

   

   2. 编程语言理论的经典对立之一就是代码和数据的区别。蠕虫的攻击方法的原理就是把数据转换为代码。代码和数据的区别也可以认为是编译时和运行时的分界线。

 

   3. 在unix中,段表示一个二进制文件相关的内容块。

 

  4.数据段包含经过初始化的全局和静态变量以及它们的值。bbs段的大小从可执行文件中得到,然后链接器得到这个大小内存块,紧跟在数据段之后。当这个内存区进入程序的地址空间后全部清零。

 

  5.  虚拟地址空间的最低部分未被映射。也就是说,它位于进程的地址空间内,但并未赋予物理地址,所以任何对它的引用都是非法的。在典型情况下,它是从地址零开始的几k字节。它用于捕捉使用空指针和小整形值的指针引用内存的情况。


  6. 运行是的数据结构有好几种:堆栈,活动记录,数据,堆等。


 7. 堆栈为函数内部声明的局部变量提供存储空间。

 8. 进行函数调用时,堆栈存储与此有关的一些维护性信息。 

 9.当每个函数被调用的时候,都会产生一个过程活动记录。

 

 10. c语言中的所有函数在词法层次中都是位于最顶层。


 11. 当控制从一个函数转到另一个函数时,堆栈的新状态显示在下面。程序从main开始执行,堆栈向下生长。


12 . 编译器设计者通过不存储使用的信息来提高速度。其他的优化措施包括把信息保存于寄存器而不是堆栈中。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值