.Net处理非托管内存的方式与C ++运行时/二进制可执行文件的方式不同吗?

卢卡斯·麦格劳

使用p / invoke与具有大量静态数据分配的Fortran库进行交互的.Net应用程序在Windows上的静态数据限制低于2 GB时无法加载该库。我成功通过p / invoke加载的最大静态代码大小约为1 GB。如果我编写了一个简单的C程序来加载该库,则可以加载最大1.9 GB的静态数据。两个测试应用程序都是32位的。

托管应用程序尝试通过LoadLibrary加载该库,但失败,并且从Marshal.GetLastWin32Error返回的错误消息是“没有足够的存储空间来处理此命令”。CLR处理非托管库的静态内存分配的方式与C ++运行时将为二进制可执行文件提供的方式有所不同吗?

汉斯·帕桑特

您也无法在C程序中保证很多,它只需要在基地址上加载一个cr脚的注入DLL,即可将可用地址空间一分为二,并且操作系统不再能够找到足够大的洞来容纳该大洞部分。

在.NET程序中,更糟糕的是,在您的pinvoke调用开始运行时,它已经加载了许多代码和数据。例如,至少有10个堆。通常,最大的漏洞约为650-750 MB,但仅在启动后立即出现。SysInternals的VMMap实用程序可以向您显示该土地的布局。

您几乎没有办法使孔变大。确保您的.NET版本足够新,以便在64位版本的Windows上获得4 GB的地址空间。您的Fortran DLL必须为/ LARGEADDRESSAWARE才能正常工作。重组Fortran代码,使其从堆分配,这肯定是您不想做的事情。是时候开始构建它的64位版本了,这很简单。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将 C/C++ 二进制可执行文件作为 docker 容器运行

来自分类Dev

如何知道我的二进制可执行文件的内存占用量

来自分类Dev

我可以在.NET Core可执行文件中嵌入文件并在运行时读取它吗?

来自分类Dev

如何在C程序运行时中正确调用可执行文件?

来自分类Dev

使用Windows可执行文件作为DLL时如何初始化C运行时

来自分类Dev

静态或动态链接到 C 运行时 (CRT) 以用于在容器中运行的二进制文件?

来自分类Dev

从JAR为AWS Lambda运行二进制可执行文件

来自分类Dev

无法在Ubuntu 12.04上运行二进制可执行文件

来自分类Dev

UiPath进程可以转换为二进制可执行文件吗?

来自分类Dev

Bash:将原始二进制变量用作可执行文件吗?

来自分类Dev

对于托管语言,是否需要将语言运行时嵌入到 Web 程序集可执行文件中?

来自分类Dev

以交互方式在Python中运行外部可执行文件

来自分类Dev

可执行文件在复制时以某种方式损坏

来自分类Dev

C可执行文件到十六进制

来自分类Dev

C可执行文件到十六进制

来自分类Dev

与位置无关的可执行文件:什么是“主要可执行二进制文件”?

来自分类Dev

二进制文件不可执行-C ++和irrklang

来自分类Dev

从Web UI访问C ++编译的可执行二进制文件

来自分类Dev

运行具有固定执行时间和内存限制的可执行文件,并获取退出代码

来自分类Dev

运行具有固定执行时间和内存限制的可执行文件,并获取退出代码

来自分类Dev

如何在32位或64位配置中以编程方式运行ANY CPU .NET可执行文件?

来自分类Dev

如何在32位或64位配置中以编程方式运行ANY CPU .NET可执行文件?

来自分类Dev

使用Nautilus运行C ++可执行文件

来自分类Dev

在Jmeter中运行C可执行文件(测试)

来自分类Dev

是否可以将可执行文件/二进制文件(已构建)作为unikernels运行?

来自分类Dev

如何更改文件管理器处理可执行文件的方式?

来自分类Dev

如何恢复正在运行的进程被删除的二进制可执行文件

来自分类Dev

有没有一种方法可以在运行时查找Eclipse编译的C二进制文件的大小?

来自分类Dev

正确的方式包含与预编译的二进制文件和手动编译的二进制文件不同的头文件

Related 相关文章

  1. 1

    将 C/C++ 二进制可执行文件作为 docker 容器运行

  2. 2

    如何知道我的二进制可执行文件的内存占用量

  3. 3

    我可以在.NET Core可执行文件中嵌入文件并在运行时读取它吗?

  4. 4

    如何在C程序运行时中正确调用可执行文件?

  5. 5

    使用Windows可执行文件作为DLL时如何初始化C运行时

  6. 6

    静态或动态链接到 C 运行时 (CRT) 以用于在容器中运行的二进制文件?

  7. 7

    从JAR为AWS Lambda运行二进制可执行文件

  8. 8

    无法在Ubuntu 12.04上运行二进制可执行文件

  9. 9

    UiPath进程可以转换为二进制可执行文件吗?

  10. 10

    Bash:将原始二进制变量用作可执行文件吗?

  11. 11

    对于托管语言,是否需要将语言运行时嵌入到 Web 程序集可执行文件中?

  12. 12

    以交互方式在Python中运行外部可执行文件

  13. 13

    可执行文件在复制时以某种方式损坏

  14. 14

    C可执行文件到十六进制

  15. 15

    C可执行文件到十六进制

  16. 16

    与位置无关的可执行文件:什么是“主要可执行二进制文件”?

  17. 17

    二进制文件不可执行-C ++和irrklang

  18. 18

    从Web UI访问C ++编译的可执行二进制文件

  19. 19

    运行具有固定执行时间和内存限制的可执行文件,并获取退出代码

  20. 20

    运行具有固定执行时间和内存限制的可执行文件,并获取退出代码

  21. 21

    如何在32位或64位配置中以编程方式运行ANY CPU .NET可执行文件?

  22. 22

    如何在32位或64位配置中以编程方式运行ANY CPU .NET可执行文件?

  23. 23

    使用Nautilus运行C ++可执行文件

  24. 24

    在Jmeter中运行C可执行文件(测试)

  25. 25

    是否可以将可执行文件/二进制文件(已构建)作为unikernels运行?

  26. 26

    如何更改文件管理器处理可执行文件的方式?

  27. 27

    如何恢复正在运行的进程被删除的二进制可执行文件

  28. 28

    有没有一种方法可以在运行时查找Eclipse编译的C二进制文件的大小?

  29. 29

    正确的方式包含与预编译的二进制文件和手动编译的二进制文件不同的头文件

热门标签

归档