【问题标题】:Limit ponters to 32 bit on 64 bit machine在 64 位机器上将 ponters 限制为 32 位
【发布时间】:2017-04-07 22:15:52
【问题描述】:

我有一个 32 位运行良好的库;但是客户端需要从 64 位应用程序链接它。但是,更改指针的大小是一个问题,因为我们必须将它们存储在 32 位值中。

是否可以告诉编译器(Visual Studio 和 GCC)创建 64 位库,但在内部只使用 32 位地址空间?

【问题讨论】:

  • 解释您曾经让 64 位应用程序在 Windows 中使用 32 位模块的神奇之处。应用程序及其加载的任何外部模块都是 64 位或全部 32 位。
  • 你是什么意思“必须将它们存储在 32 位值中”。除非您使用 uint32 或数据类型来存储指针而不是指针类型,否则为 x64 架构编译库应该是一个问题。
  • 另外,如果您使用 ULONG_PTR 而不是已知的 int 类型来存储指针,您可以阻止这种情况(在 Windows 中)。那么这一切都是透明的。
  • @SergeyA 实际上有 x32 ABI,无论如何在 linux 上。可能也无济于事,但在 64 位模式下运行并不一定意味着您的指针必须是 64 位。
  • 我的建议是更改适合指针大小类型的数据类型,将代码重新编译为 64 位,修复发现的任何错误。总比试图在 64 位类型中只使用 32 位来解决问题。

标签: c++ 32bit-64bit


【解决方案1】:

没有。 sizeof(void*) 几乎是一个常数。它可以是 4 或 8,但不能是 4 8。

【讨论】:

    猜你喜欢
    • 2011-08-08
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 2020-08-18
    • 2012-04-12
    • 2014-11-27
    • 2012-07-25
    相关资源
    最近更新 更多