日期:2014-05-18  浏览次数:20680 次

内存指针分配,急啊
如何按照20递增的指针 在内存中分配 例如 第一小块的内存 指针为A 第二小块的内存 指针为A+20 依次递增 要求放到内存中,进程可以查询。根据20递增 查询指针 怎么做呢

------解决方案--------------------
比如你分配100字节,那就一下分配好了,你那样每次20个,并不能保证每块都是连续的
Marshal.AllocHGlobal(100)
------解决方案--------------------
探讨

引用:

比如你分配100字节,那就一下分配好了,你那样每次20个,并不能保证每块都是连续的
Marshal.AllocHGlobal(100)


可我现在就需要按照,20来递增分配内存,根据指针递增20来查找内存当中指针所指向的地址的值。

如何弄呢

------解决方案--------------------
你这样做还要先清理一块地出来给你才能保证是连续的
------解决方案--------------------
我以前,写了一个 解析 纯真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);
            }

        }

------解决方案--------------------
探讨
如何按照20递增的指针 在内存中分配 例如 第一小块的内存 指针为A 第二小块的内存 指针为A+20 依次递增 要求放到内存中,进程可以查询。根据20递增 查询指针 怎么做呢