社区
C++ 语言
帖子详情
什么样的32bit程序不能直接在64bit os上通过WOW64模拟运行?
qubo
2008-03-27 09:22:05
有什么特定条件的32bit程序不能直接在64bit os上通过WOW64模拟运行?
请告知,谢谢。
...全文
303
6
打赏
收藏
什么样的32bit程序不能直接在64bit os上通过WOW64模拟运行?
有什么特定条件的32bit程序不能直接在64bit os上通过WOW64模拟运行? 请告知,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qubo
2008-03-27
打赏
举报
回复
全部的32bit程序都能直接在64bit os上通过WOW64模拟运行,这样理解正确吗?
有不能运行的特例吗?
jixingzhong
2008-03-27
打赏
举报
回复
分析模拟的过程,自己总结
貌似没有看到类似的“龟腚”出现
星羽
2008-03-27
打赏
举报
回复
http://blog.csdn.net/xieqidong/archive/2008/03/25/2215577.aspx
这个文章也不错
星羽
2008-03-27
打赏
举报
回复
转
以高阶语言编写的应用软件,从 32 位架构转换到 64 位架构的各种困难。一个共同的问题是,部分程序员假定指针如同其它数据型态一样有相同的长度。程序员假定他们可以在数据型态之间传送数量而不遗失信息。这些假定只在一部分 32 位机器上如此(甚至是一部分 16 位机器),不过在 64 位机器上就不再如此。C 语言及其后代 C++ 尤其容易产生这种错误[1]。
要在 C 和 C++ 中避免这种错误,如果确定原始类型的大小为所需的基础,sizeof 操作符可用来确定原始类型的大小,无论是在编译以及执行时期。此外,在 C99 标准中的 <limits.h> 表头,以及在 C++ 标准中的 <limits> 表头的 numeric_limits 类,可提供更多有用的信息;sizeof 只返回字符大小。这个用法使人产生误解,因为一个字符(CHAR_BITS)的大小是由自身决定,在所有的 C 或 C++ 实作中并未以相同方式定义。然而,除了这些编译器目标 DSP 以外,“64 位 = 8 字符(每一字符有 8 位)”已成标准。
必须谨慎使用 ptrdiff_t 型态(在标准表头 <stddef.h> 中)两个指针相减的结果;太多代码宁可不正确的使用“int”或“long”。表示一个指针(而不是指针差异)为一个整数,在此可以使用 uintptr_t(它只定义在 C99 中,不过某些编译器另外集成较早版本的标准以提供之,作为一个扩充)。
C 和 C++ 并未定义指针、整数型(int)、长型(long)为特定的位数目。
在主要的 32 位机器程序设计环境中,指针、“int”变量、“long”变量全部都是 32 位长。
然而,在 64 位机器下的许多程序设计环境,“int”变量仍然是 32 位宽,不过“long”和指针是 64 位宽,上述内容称为 LP64 数据模型。另一个选择是 ILP64 数据模型,三种数据型态都是 64 位宽,甚至 SILP64 连“short”变量也是 64 位宽。然而,大多数情况下所需的修改是相对次要且简单,而且许多编写良好的程序可以简单的重新编译给新的环境,而无须修改。另一个选择是 LLP64 模型,其维持 32 位代码的兼容性,使 int 和 long 为 32 位。“LL”指“long long”型态,其在所有平台下至少是 64 位,包括 32 位环境。
今天有许多 64 位编译器使用 LP64 模型(包括 Solaris、AIX、HP、Linux、Mac OS X、IBM z/OS 本地编译器)。微软的 VC++ 编译器使用 LLP64 模型。其缺点是在 LP64 模型中将 long 存放到 int 可能会溢出。另一方面,还会使强制转型一个指针为 long 可以作用;在 LLP 模型下,情况则刚好相反。两者皆不应该出现在合乎 C99 的代码中。
注意,程序设计模型是在预编译器底层选择的,且数个模型可共存于同一操作系统。然而一般由 OS API 选择程序设计模型作为原始模型。
另一个考量是用于驱动程序的数据模式。在现代的操作系统中,驱动程序弥补了大多数的操作系统代码(尽管许多代码可能不会加载,当操作系统执行时)。许多驱动程序大量使用指针操控数据,且在某些情况下必须读入一定大小的指针进入支持 DMA 的硬件。举个例子,提供给 32 位 PCI 设备的驱动程序,请求设备的 DMA 数据进入 64 位机器内存的较高区域,可能无法满足来自操作系统从设备到大于 4 GB 内存读入数据的要求。因为对于这些地址的指针,将不适合设备的 DMA 寄存器。这个问题可如下解决,当向设备发出 DMA 请求时,OS 采用与设备相符的内存限制,或者使用 IOMMU。
qiuqiu173
2008-03-27
打赏
举报
回复
数据类型位数变了吧,查一查资料吧
星羽
2008-03-27
打赏
举报
回复
注意一下数据长度,特别是int long之类
64BIT机器有三种模式:ILP64,LP64,LLP64.
Windows采用LLP64,即int,long都为32,pointer为64
Linux采用LP64,即int为32,long和pointer为64
用VC进行
64
位编程
献给c/c++的同学。它包括创建一个
64
位安全的应用
程序
或者是从
32
位迁移到
64
系统的所有步骤。该介绍一共包括28课,涉及的内容有
64
位系统,
64
位应用
程序
的构建,如何找
64
位代码的问题和如何优化。 第一课:
64
位的系统是什么 在写这个课程的时候,有2个流行的微处理器的
64
位架构:IA
64
和Intel
64
. 1、IA-
64
:是Intel和Hewlett Packard 共同研发6
32
位和
64
位编程注意事项总结
http://www.
os
china.net/p/flowvisor http://www.cnblogs.com/centimeter/articles/2395405.html http://www.360doc.com/content/13/0520/21/7662927_286868466.shtml http://zhidao.baidu.
32
位与
64
位编程注意事项总结
http://www.
os
china.net/p/flowvisor http://www.cnblogs.com/centimeter/articles/2395405.html http://www.360doc.com/content/13/0520/21/7662927_286868466.shtml http://zhidao.baidu.com/link?url
再谈CLR:GAC目录的构造
我们一般都知道,.NET Framework的GAC(global assembly cache)其实就是一个特殊的目录,如下图所示 但是它内部到底是什么结构呢? 很奇怪对吧?两个图完全不一样。不要惊讶,其实第一个图只是一个特殊的呈现方式。GAC里面确实就只有几个目录而已 。 一个比较完整的.NET Framework 2.0的GAC下子目录的结构如下所示: GAC GAC_
32
GAC_MSIL GAC_
64
NativeImages1_v1.1.4
32
2 NativeImages_
MP3参数,格式,术语有关一切内容详解。
一 音频编码篇 通常我们采用脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的
模拟
信号转换为数字编码。 1、什么是采样率和采样大小(位/
bit
)? 频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽
C++ 语言
64,648
社区成员
250,503
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章