C# 在应用程序启动之前,在.NET中保留硬编码内存映射地址
我们有一个C#.NET应用程序,它绑定到一个非托管的C dll。 C dll使用CreateFileMapping()和MapViewOffilex()与同一台计算机上的其他进程共享内存 MapViewOffilex()使用最后一个参数(lpBaseAddress),并在本例中将其设置为0x08000000。如果您足够早地调用dll中的初始化函数,这对于所有c/c++应用程序都是好的。 然而,在c#中,更大的应用程序甚至在我们有机会在自动生成的静态方法Main()中调用dll的init函数之前就分配了大量内存。(小型c#控制台应用程序工作正常) 在自动分配类和内容之前,是否有一种方法可以在.NET应用程序启动时预先分配0x0800000到0x08400000区域?那么,我们可以随时将共享内存映射到0x08000000,这应该没有问题 限制: 显而易见的解决方案不能应用于此C# 在应用程序启动之前,在.NET中保留硬编码内存映射地址,c#,dll,unmanaged,C#,Dll,Unmanaged,我们有一个C#.NET应用程序,它绑定到一个非托管的C dll。 C dll使用CreateFileMapping()和MapViewOffilex()与同一台计算机上的其他进程共享内存 MapViewOffilex()使用最后一个参数(lpBaseAddress),并在本例中将其设置为0x08000000。如果您足够早地调用dll中的初始化函数,这对于所有c/c++应用程序都是好的。 然而,在c#中,更大的应用程序甚至在我们有机会在自动生成的静态方法Main()中调用dll的init函数之前就
- 不可能通过调用MapViewOfFile来使用动态分配的虚拟地址,因为这需要对当前在所有进程中使用绝对指针的C dll进行大量更改
- 也不可能在所有进程之间协商公共基址,因为它们不会同时启动