public void Free() { UnmanagedMemory.FreeHGlobal(points); points = null; UnmanagedMemory.FreeHGlobal(centers); centers = null; }
public unsafe void Test_BigArray() { Console.WriteLine("Size of element: {0}, sizeof IntPtr: {1}", sizeof(TestStruct), sizeof(IntPtr)); Int64 arrSize = 200 * 1000000; Int64 byteSize = (Int64)(arrSize * (Int64)sizeof(TestStruct)); Console.WriteLine("Allocating {0:#,#} bytes...", byteSize); TestStruct *pArray = (TestStruct *)UnmanagedMemory.AllocHGlobalEx(byteSize); Console.WriteLine("Allocated {0:#,#} bytes", byteSize); pArray[0].data[0] = 1; Console.WriteLine("Filling with data..."); for (Int64 i = 0; i < arrSize; ++i) { pArray[i].data[0] = 10; } Console.WriteLine("Freeing memory"); UnmanagedMemory.FreeHGlobal(pArray); }
public void Test_Diag() { UnmanagedMemory.IsDiagOn = true; IntPtr p; byte * pb; bool isExceptionThrown; // Overwrite after try { isExceptionThrown = false; p = UnmanagedMemory.AllocHGlobal(10); pb = (byte *)p.ToPointer(); *(pb + 10) = 0xFF; UnmanagedMemory.FreeHGlobal(p.ToPointer()); } catch (ApplicationException) { isExceptionThrown = true; } Assert.IsTrue(isExceptionThrown); // Overwrite befor try { isExceptionThrown = false; p = UnmanagedMemory.AllocHGlobal(10); pb = (byte *)p.ToPointer(); *(pb - 1) = 0xFF; UnmanagedMemory.FreeHGlobal(p.ToPointer()); } catch (ApplicationException) { isExceptionThrown = true; } Assert.IsTrue(isExceptionThrown); // Overwrite befor and after try { isExceptionThrown = false; p = UnmanagedMemory.AllocHGlobal(10); pb = (byte *)p.ToPointer(); *(pb + 10) = 0xFF; *(pb - 8) = 0xFF; UnmanagedMemory.FreeHGlobal(p.ToPointer()); } catch (ApplicationException) { isExceptionThrown = true; } Assert.IsTrue(isExceptionThrown); UnmanagedMemory.IsDiagOn = false; }