编译器对数组(含形参)的支持实现技术咨询
最近我刚搞定了为一款严格C子集的编译型语言从零实现数组功能的活儿,把过程里的关键细节整理出来,给有类似需求的朋友做个参考:
已实现的核心数组特性
- 完成了扫描器与解析器的扩展,目前全局数组和局部数组(包括多维数组)都能正常编译运行
- 数组的声明、访问、赋值等基础操作逻辑都已打通
内存分配规则
我给数组的每个元素固定分配8 Byte的存储空间,举个例子:声明arr[10]时,编译器会直接为它分配10 * 8 = 80 Byte的连续内存块;多维数组也是同样的逻辑,比如int arr[2][3],总内存就是2*3*8=48 Byte。
寻址与赋值实现
数组元素的寻址和赋值完全采用**行主序(Row-major Order)**的方式:先遍历完第一行的所有元素,再进入下一行,以此类推。这样在计算元素的内存偏移量时,直接按照行优先的公式推导就能定位到目标地址,保证访问效率。
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

