关于内存管理 C语言的问题

2019-03-23 17:50发布

if(!mallco_dev.memmap[memx][offset])cmemb++;//连续空内存块数增加
这句话我看不懂,怎么memmap是个二维数组了
u16 *memmap[SRAMBANK];   
这是前面定义的,是个数组指针
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
okwh
2019-03-25 19:44
本帖最后由 okwh 于 2017-1-27 13:06 编辑
大家都是好朋友 发表于 2017-1-26 15:47
还有C程序说不能直接给变量赋地址
但我看这个单片机的程序,需要给某个寄存器赋值,就DEFINE 定义它的地 ...

关键不是能不能,而是能否使用、如何使用....
C语言这范围太广了,通常情况下,给变量赋直接数值表达地址,不能使用。但用&转译赋值是可以的,否则,指针怎么用?  一切一切最终让电路执行时都必须落实到地址和内容。
单片机,通常事先就知道所有存储、接口资源的地址和范围多少,当然就可以直接define使用了。而台式机,编译的exe文件采用的相对重定位方法,装入到内存时才确定运行时的地址,所以是无法事先直接用数值指定地址的。
说个比喻: 1 是什么? 铅笔?树枝? 阿拉伯数字? 那么 one ,  壹 , I, 日语的 "以其" 音,德语的 “俺斯”  .........   
把世界上所有语言所有可能的 1 的表达,能全都列出来?又怎么学呢? 那抛开所有表达形式的本质 到底是什么呢?

一周热门 更多>