我可能太好奇或小心,但请考虑一下:
如果我将一个数组放在某个部分
char buff[128] __attribute__((my_section))
;
然后使用链接描述文件将该部分放在例如地址0x10004000处,
我可以永远确定,&buff[0]
总是为0x10004000吗? (我正在考虑ARM公司的ARMCC(前RealView)以及基本的GCC工具链和GNU ARM开源。)从开始或可能某些服务(运行时,链接,特定的tollchain)可能有buff
偏移量或填充量东西可以放在buff
之前的0x10004000处吗?
另外,在这种情况下C和C ++之间是否有任何差异?因为C ++有“在后台做更多的事情”。 :)
我可以提供任何类型的文件以及您的知识 - 非常感谢。
答案 0 :(得分:0)
是的,& buff [0]将始终为0x10004000。您可以在Keil帮助文件的“编译器用户指南”一书中看到第9.46节。
Char数组是c / c ++的内联对象。所以编译器对c / c ++做了同样的事情。