下面何宾老师举例说明:
写一段C语言代码,把Memory Model设在不同选项,看看有什么差别?
- void main()
- {
- volatile int a=1000,b=5000;
- volatile int *d, *e;
- volatile int *f;
- d=&a;e=&b;//d取a的首地址,e取b的首地址
- *f=a+b;//把a+b的结果送到f变量所指的存储单元里去
-
- }
复制代码 建立项目,把上面的代码作为主程序,反汇编一下:
就能看出存储器里有没有这些变量!
编译器是设置不同,细节就不同:
--Memory Model Tiny在微型存储器模型中。默认,所有变量都驻留在MCS-
251 ISA兼容单片机的内部数据存储器中,就好像它们是使用数据存储器类型说明符显式声明的一样在该存储器模型中,变量和指针访问非常有效。默认,指针大小仅为2个字节,表示近(near)存储器的指针。常数保存在NCONST存储器类中。使用HOLD命令,可以将指定对象大小以上的变量定向到其他存储器区域。
通常,如果将链接器/定位器配置为覆盖内部数据存储器的变量,则Tiny模型是最好的模型
|