[quote=引用 4 楼 zhao4zhong1 的回复:] 为什么不参考开源软件Tiny C Compiler呢?
[quote=引用 5 楼 cqx5555 的回复:] [quote=引用 4 楼 zhao4zhong1 的回复:] 为什么不参考开源软件Tiny C Compiler呢?
在能够熟练使用编程的编译器基础上再考虑去写。 如果不能把各种变量的存储位置,生命周期,使用规则等等了解清楚了,就去写编译器,链接器等等。就相当于地基没打好就去想着盖高楼。 我不是过来打击你的,而是告知我们应该遵循一个尝试和规律
为什么不参考开源软件Tiny C Compiler呢?
1. 全局变量分两种, 已初始化的和未初始化的, 已初始化的全局变量保存在数据段中, 未初始化的全局变量在文件中不保存, 只记录加载到内存后的位置信息. char *a = "hello world!" 会首先在只读数据段中分配 "hello world!" 字符串的空间, 然后再分配指针变量 a 的空间, 并让 a 的初始值指向分配的字符串的地址. 2. 重定位用于动态链接库, 当两个动态库的加载位置冲突时, 只能有其中一个加载到预先设计好的位置, 另外一个加载的位置和保留的位置不同, 里面对全局变量的引用地址就会发生变化, 重定位表就用于在此时修正这些地址的变化. 3. 找一些开源的编译器代码来看吧
69,382
社区成员
243,073
社区内容
加载中
试试用AI创作助手写篇文章吧