-5

我正在尝试将应用程序从 linux 迁移到 Win,并且我已经在堆大小、ram 和 ... 大多数人更喜欢在 linux 上而不是 Win 上工作的 Ram 上遇到了很多困难?

4

1 回答 1

1

我知道的唯一原因是:您的原始代码中有错误。

管理内存有两个主要区别:

1) 线性

在 Unix 系统下,您可以根据需要增加堆,因此地址是线性分配的,从数据段的末尾开始增加。在大多数情况下,这是透明的。但是,如果您在指针和整数之间执行 reinterpret_cast<>()(或类似 C 的转换),您也可能会遇到问题(例如,如果您从 Linux 32 转到 Windows 64。)

2) 清除

Windows 以不同于 Linux 的方式清除 RAM(将其设置为全零)。在大多数情况下,这就是您所描述的导致悲伤的原因。这也适用于堆栈数据。

在调试模式下,Windows 调试库也会故意将 RAM 设置为不同的值(例如 0xCC 或 0xFE)。这对于检测错误很有用,很可能是您的 Linux 版本中存在错误,只是因为它“有效”。

同样关于堆栈,因为 cl 和 gcc 编译器的做法完全不同,所以堆栈完全不同。所以你唯一看到的是你的原始代码中有一个错误......

于 2013-05-26T01:43:49.770 回答