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

2019-03-23 17:50发布

if(!mallco_dev.memmap[memx][offset])cmemb++;//连续空内存块数增加
这句话我看不懂,怎么memmap是个二维数组了
u16 *memmap[SRAMBANK];   
这是前面定义的,是个数组指针
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
大家都是好朋友
1楼-- · 2019-03-25 02:01
okwh 发表于 2017-1-26 15:24
书上 更多为编译器、为人那一端设计。
嵌入这一端,基本上只用最有效最基本的数据结构-通常只有最基本 ...

还有C程序说不能直接给变量赋地址
但我看这个单片机的程序,需要给某个寄存器赋值,就DEFINE 定义它的地址,然后指针指向它。。。
白丁
2楼-- · 2019-03-25 04:47
 精彩回答 2  元偷偷看……
大家都是好朋友
3楼-- · 2019-03-25 05:03
白丁 发表于 2017-1-26 21:34
51是八位机,怎么会有字节对齐的问题呢,这些都是说的32位机了

对呀 我是说以前学的都没见过这个
okwh
4楼-- · 2019-03-25 10:27
本帖最后由 okwh 于 2017-1-27 13:09 编辑
大家都是好朋友 发表于 2017-1-26 15:45
比如字节对齐,我C语言没见过,51汇编也没见过。
它是伪代码吧?

51是8位,本身就是字节对齐的,也只可能是,更多如处理16、24、32位就需要自己编程处理。
32机如ARM正好不一样,32位下有处理8/16/24/32/64等各种可能需要,就有了各种让步平衡取舍。
其实还有直接间接位操作、还有大端小端......  至于PC机里面如何对齐排列,不让自己管,一切编译器代劳了。
基本原理、宏观结构、细节处理,学习要分层,不然混为一潭,不但容易晕,也让人无法回答。
计算机这种行当相关学习的麻烦之一就是 有时候不知道是学或在学遥控器操作、还是在学电视机内部制造、还是在学单晶硅提炼........
okwh
5楼-- · 2019-03-25 15:56
 精彩回答 2  元偷偷看……
okwh
6楼-- · 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 的表达,能全都列出来?又怎么学呢? 那抛开所有表达形式的本质 到底是什么呢?

一周热门 更多>