const变量,在网上的嵌入式面试题中就有一个很经典的题目.我想很多人一定都看到过.你都理解和运用过吗?
我有这么个实例和大家分享一下:
我们的代码中固化了很多菜单条目,形式如下:
unsigned char * pMenuItem[N]
pMenuItem[0]= "test menu item0";
..........
但是大家有没有认真想过这段代码缺点在哪里?
我查了一下网上的资料,前面的菜单条指针据说在新版本中会被自动设置成指向const的指针(指向const的指针,而指针本身并不是const),我没有测试.这样至少降低了我们修改这个串的风险。但是用dump功能看一看你的指针变量地址,他还是在ram中。这些地址我们完全是不需要改动的,我们为什么不把它也放置在flash中呢?
想一想,当有一大堆的菜单条要初始化的时候有很多.data段数据会从flash中copy到ram中,我没仔细考虑将浪费多少处理机时间,也许微不足道,但是既然很简单地能解决这个问题,为什么不这么做呢?
unsigned char * const pMenuItem[N];
pMenuItem[0] = "test menu item0";
在我的环境中,pMenuItem0 会被放置到.rodata中,这将省去初始化的工作,注意一下const放置的位置。
不好意思,这一段东西我没去测试了。
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论