为现有的32位代码添加64位支持,难度很大吗?

时间:2010-11-02 13:40:08

标签: c embedded 64-bit 32bit-64bit

我建立了一个针对不同32位平台的库。现在,必须支持64位体系结构。扩展现有32位代码以支持64位架构的最常用策略是什么?我应该使用#ifdef还是其他什么?

3 个答案:

答案 0 :(得分:16)

所涉及的工作量将完全取决于原始代码的编写程度。在最好的情况下,除了重新编译之外,不会涉及任何其他工作。在最坏的情况下,您将不得不花费大量时间使您的代码“64位清洁”。

典型问题是:

  • 关于int / long / pointer / etc的大小的假设
  • 指定指针< =>整数
  • 依赖于默认参数或函数结果转换(即没有函数原型)
  • 不合适的printf / scanf格式说明符
  • 关于结构的大小/对齐/填充的假设(特别是关于文件或网络I / O,或与其他API的连接等)
  • 使用字节偏移执行指针算法时不合适的强制转换

答案 1 :(得分:1)

根本不依赖于机器字大小的假设?总是使用sizeof,stdint.h等。除非你依赖不同的库调用不同的架构,否则不需要#ifdefs。

答案 2 :(得分:-1)

最简单的策略是使用64位设置构建您拥有的内容并测试其中的内容。有些代码根本不需要改变。其他代码,通常对int /指针大小的错误假设将更加脆弱,需要修改为不依赖于体系结构。

通常,包含二进制记录的二进制文件会导致大多数问题。在从过渡到64位构建的内容从32位增长到64位的环境中尤其如此。这主要是因为整数以当前(32位)长度本地写入文件,并在64位构建中使用不正确的长度读取,其中整数为64位。