【发布时间】:2018-09-16 17:20:50
【问题描述】:
我刚刚在 LinkedIn Learning 上观看了这个视频,它正在谈论 查找表,它提到如果没有 'const' 限定符,数组将在 RAM 中分配,并且在启动期间进行初始分配,整个表将被存储两次 - 在 RAM 和 ROM 中。
有人可以更详细地向我解释一下吗?为什么它会被存储两次?这是否意味着所有没有“const”的变量/数组都会被存储两次? switch case 会比没有 const 的查找表更好吗?
提前致谢。
【问题讨论】:
-
const由于 C 而不是必需的。这取决于编译器和处理器。您使用的是什么处理器和编译器? -
您在教科书中找不到的
const限定词有什么不清楚的地方?从不起眼的在线“教程”或 YT 视频中学习 C 是个坏主意。 -
可能的答案很简单,如果您声明一个没有
const的查找表(或任何数据结构)并为其提供初始数据,那么系统必须同时拥有初始数据的副本并为查找表提供单独的空间。这是因为,由于表不是const,编译器必须考虑到某些东西可能会改变它的事实(除非它可以通过检查所有代码来证明不是这样)。因此,要创建请求的表,编译器必须为程序安排表空间,并且必须用初始数据填充该空间。为此,…… -
…初始数据必须可用。所以一定有它的副本在某个地方。相反,如果表是用
const定义的,那么初始数据本身就可以充当表。包含初始数据的表只有一个副本,并且它只是读取,从不修改,因此不需要单独的初始数据副本。 -
@EricPostpischil 谢谢。太清楚了!
标签: c memory embedded lookup lookup-tables