内存指针分配,急啊
如何按照20递增的指针 在内存中分配 例如 第一小块的内存 指针为A 第二小块的内存 指针为A+20 依次递增 要求放到内存中,进程可以查询。根据20递增 查询指针 怎么做呢
------解决方案--------------------比如你分配100字节,那就一下分配好了,你那样每次20个,并不能保证每块都是连续的
Marshal.AllocHGlobal(100)
------解决方案--------------------
------解决方案--------------------你这样做还要先清理一块地出来给你才能保证是连续的
------解决方案--------------------我以前,写了一个 解析 纯真IP 库的程序;
7.6M的文件,我也在里面 直接操作 字节;偏移内存量获得自己需要的指针!
——其实,你用“指针”这个说法,反而对你的问题不利;
你直接问,C# 如何操作内存就好了!
——————————————————————————————————
C# 冒似很难,让你 间接分配连续内存空间;
换言之,你想要内存块连续,你就要一开始指定 内存 总量是多少;
byte[] bytes = new[20*N] ; //N 即为 你的总数据量;
接下来 就是
byte[] value2= new byte[20]{ bytes[2*20],bytes[2*20+1],bytes[2*20+2].....bytes[2*20+19] };
上面代码的 意思是 获取 索引 2 的20个字节
上面这行代码冒似有 现成函数的,不必像我这样写得复杂;
------解决方案--------------------
C# code
public struct obj
{
public int a;
}
private void button1_Click(object sender, EventArgs e)
{
int intCount = 10;
int objSize = Marshal.SizeOf(typeof(obj));
unsafe
{
IntPtr ip=Marshal.AllocHGlobal(intCount * objSize);
obj* pObj = (obj*)ip.ToPointer();
obj* pOriginal = pObj;
for (int i = 0; i < intCount; i++)
{
(*(pObj++)).a = i;
}
for (int i = 0; i < intCount; i++)
{
Console.WriteLine(pOriginal[i].a);
}
Marshal.FreeHGlobal(ip);
}
}
------解决方案--------------------