Part Number:TMS320F28374S
我在做源c文件代码封装为静态库文件.Lib时,遇到了指针类型变量在不同优化级别下,指针取值的地址不一致的问题。
实际现象:
使用CCS8.2建立一个输出类型为executable类型的工程,编译器为18.1.1.LTS。在C文件 TEST.c 中,定义一个* unsigned long 类型的变量A (无符号32位指针),定义一个unsigned long 类型的变量B(无符号32位整型), 编译器使用1级优化。
令这个这个指针指向地址为0x00014279。 对A进行取值操作将值赋值给B,观测到B中的数据为0x0001427A(高16位) 0x00014279(低16位)两个地址的值。
使用同样的C文件, 使用CCS8.2建立一个输出类型为静态库的工程,编译器为18.1.1.LTS。编译器使用0级优化,编译之后得到。lib文件。将这个LIb文件替换掉上面工程中的TEST.C文件,
观测到观测到B中的数据为0x00014279(高16位) 0x00014278(低16位)两个地址的值。
请问为什么会出现这样的现象?
Yale Li:
如果优化等级调整为相同的,结果如何呢?
文智 张 said:将这个LIb文件替换掉上面工程中的TEST.C文件
能再具体描述一下这里吗?
,
文智 张:
如果编译静态库文件时候的优化级别设置为1,再替换c文件源码,则与直接使用c文件源码编译的结果一样。
,
Yale Li:
我需要一些时间来看一下