|

楼主 |
发表于 2013-3-30 11:21:27
|
显示全部楼层
问题集锦:
3月29日----C和指针----第6章 指针----第91页始
1.NULL指针的具体实现,它的实现与编译器及操作系统有何关联?
2.编译器,内存,操作系统三者之间是什么样的关系,主要是有疑惑编写程序后操作系统起到什么作用,操作系统是如何管理程序运行的?编写程序时是否需要专门编写代码协助操作系统的管理,还是直接交由编译器实现?(编译器是与操作系统密切相关且匹配的,这个我懂得,是否可以说编译器编译过程中就为特定操作系统对程序运行时的管理进行了考虑,或者换句话说,编译器是否为方便操作系统的管理而在源代码编译后的基础上添加了与操作系统适应的内容)
3.名字与内存位置的关联不是有硬件所提供的,而是由编译器实现的,这点我知道,但是编译器在编译时肯定是不会有实际地址给出的,那么是通过给出偏移量而实现的?(类似于汇编中的实现方式)
4.非法指针引起的错误与具体的操作系统有什么关系?这个问题的源于对《C和指针》p95页那段“警告:”的话不理解(我想这应该在操作系统原理里面会有提到,不过自己去找由于大海捞针且前后知识欠缺,理解上肯定会存在问题)
5.硬件事项:边界对齐是怎么一回事?
6.静态变量会被初始化为0,而自动变量则不会被初始化,这两个变量具体实现上有何区别,编译器这样实现的目的是?
7.声明变量而不初始化与定义变量在编译器的实现而言有何差别,我记得书中好像提到了声明变量的话并不会分配空间,而定义变量则会同时分配空间,那么若没有分配空间,那C和指针一书p95--6.5 未初始化和非法的指针一小节,例子中直接将12赋值给*a,那此时赋值后,肯定是获取指针a中的内容然后再将12存储在相应地址,那么既然a没有分配空间,那如何能有内容作为地址?(注:我知道这个例子是错误的举例,但是我分析过了,与我想要问的问题并不冲突)
8.为了测试一个指针变量是否为NULL,可将其与0进行比较,如何进行?直接使用比较表达式还是其他?
9.编译器负责零值和内部值之间的翻译转换,这个是如何实现的?(这个内部值指的是NULL,但我想这个翻译转换在编译器应该是很普遍存在的)
10.编译器如何区分常量的类型?(这个问题似乎可以一句话解释,就是依据二进制的值来进行,不过我似乎希望得到更具体有说服性的答案)
(其实我每天产生的疑惑都在20以上,不过怕鱼油没兴趣回答我的问题,所以先贴10个看看,另外读研的孩子是痛苦的,身不由己,没太多时间,也只有看看计算机理论,敲敲代码寻一慰藉了。不过目前知识太欠缺,急需进补,望各位不吝赐教!任何认为可以的答案都可以告诉我,再次谢谢!) |
|