//本文套的是c#的壳,里面还是c++,功能是遍历大内存和计算,看看时间

//本程序调试通过,拷贝过去,修改命名空间,项目里面允许不安全代码。

//你电脑的剩余内存要足够,要不然,还是会报错

//可参考本人的上一篇文章

using System;
using System.Runtime.InteropServices;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
DateTime DT1 = DateTime.Now;
aaa.Method();
DateTime DT2 = DateTime.Now;
Console.WriteLine(DT2-DT1);
Console.ReadLine();
}

}
public static class aaa
{
static public void Method()
{

unsafe
{
const int m = 200000000;

// 使用AllocHGlobal模拟malloc
IntPtr a = (IntPtr) Marshal.AllocHGlobal (m * sizeof(int));
int* a1 =  (int*) a;// 精髓在此行,要不然释放内存行会报错

IntPtr b = (IntPtr)Marshal.AllocHGlobal(m * sizeof(int)); // 使用AllocHGlobal模拟malloc
int* b1 = (int*)a;

for (int i = 0; i < m; i++)
{
*a1 = i;
a1++;
}
a1--;

Console.WriteLine(*a1);
a1 = (int*)a;
for (int i = 0; i < m; i++)
{
*b1 = (*a1)*3;
a1++;
b1++;
}
b1--;
Console.WriteLine(*b1);
Marshal.FreeHGlobal(a);//释放内存
Marshal.FreeHGlobal(b);//释放内存

}
}

static public void Method2()//c#
{
const int m = 100000000;
int[] a = new int[m];
int[] b = new int[m];
for (int i = 0; i < m; i++)
{
a[i] = i;
}
Console.WriteLine(a[m - 1]);
for (int i = 0; i < m; i++)
{
b[i] = a[i] * 3;
}
Console.WriteLine(b[m - 1]);
}
}
}

//本文套的是c#的壳,里面还是c++,功能是遍历大内存和计算,看看时间//本程序调试通过,拷贝过去,修改命名空间,项目里面允许不安全代码。//你电脑的剩余内存要足够,要不然,还是会报错 byte* buff; buff = (byte *) Mar sha l.AllocHGlobal(100);/* 申请 100字节 内存 */ Mar sha l.FreeHGlobal((IntPtr)buff);/*释放 申请 内存 */ Note:需...
要在 C# 中调用 C++ 并传递数组,可以使用平台调用(Platform Invocation Services,P/Invoke)来实现。在 C# 中,可以使用DllImport特性来声明 C++ 函数,并使用IntPtr来表示指针类型。以下是一个示例代码: ```c sha rp // 声明 C++ 函数 \[DllImport("YourCppLibrary.dll", CallingConvention = CallingConvention.Cdecl)\] private static extern void YourCppFunction(IntPtr array, int length); // 定义结构体 \[StructLayout(LayoutKind.Sequential)\] public struct YourStruct // 定义结构体成员 public int intValue; public float floatValue; // ... // 在 C# 中调用 C++ 函数 YourStruct\[\] array = new YourStruct\[10\]; IntPtr ptr = Mar sha l.AllocHGlobal( Mar sha l.SizeOf(typeof(YourStruct)) * array.Length); for (int i = 0; i < array.Length; i++) Mar sha l.StructureToPtr(array\[i\], (IntPtr)((long)ptr + i * Mar sha l.SizeOf(typeof(YourStruct))), false); YourCppFunction(ptr, array.Length); Mar sha l.FreeHGlobal(ptr); 在这个示例中,我们首先使用DllImport特性声明了一个 C++ 函数,然后定义了一个结构体来表示数组的元素类型。在调用 C++ 函数之前,我们使用 Mar sha l.AllocHGlobal方法为数组分配 内存 ,并使用 Mar sha l.StructureToPtr方法将数组中的元素复制到 内存 中。最后,我们调用 C++ 函数,并在使用完毕后使用 Mar sha l.FreeHGlobal方法释放 内存 。 请注意,示例中的函数和结构体名称是示意性的,你需要根据你的实际情况进行相应的修改。另外,还需要确保 C++ 函数的参数类型和顺序与 C# 中的声明一致。 #### 引用[.reference_title] - *1* [ C# 调用 C++ DLL数组,结构体传递](https://blog.csdn.net/zsqysq/article/details/119646597)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ C# 调用 C++ dll 指针数组](https://blog.csdn.net/hondef/article/details/129027991)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]