主要观点:Windows 上的 32 位和 64 位开发问题持续存在,64 位处理器出现已十年但仍存在问题。
关键信息:
- 64 位 Windows 系统中存储 32 位和 64 位系统 dll,64 位 dll 在 C:\windows\system32,32 位 dll 在 C:\windows\syswow64。
- 32 位进程打开 C:\program files 中的文件实际读取/写入到 C:\program files (x86)。
- 32 位和 64 位应用有不同的注册表视图,64 位注册表位置对 32 位应用不可见。
- 托管代码有anycpu选项,.net 4.0 及之前在不同系统下编译不同代码,.net 4.5 及 Visual Studio 11 中默认是“any cpu 32 - bit preferred”,其语义与之前不同。
重要细节: - Visual Studio 2010 前多数.net 项目默认是 anycpu,在 64 位系统上运行时可能导致意外结果,如依赖 32 位 unmanaged dll 时 64 位版本无法加载。
- Visual Studio 2010 中 x86 成为多数.net 项目默认,但语义未变。
- 在“.net 4.5 和 Visual Studio 11”中,“any cpu 32 - bit preferred”默认,与 x86 的区别是能在 arm 系统上运行,而 x86 不能。
- 通过创建新的 C#控制台应用并使用 corflags.exe 可查看相关属性和设置,如改变 32bitpref 设置后输出会改变。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。