X hits on this document

996 views

0 shares

0 downloads

0 comments

345 / 396

C# LANGUAGE SPECIFICATION

// Allocates a memory block of the given size. The allocated memory is // automatically initialized to zero.

public static void* Alloc(int size) { void* result = HeapAlloc(ph, HEAP_ZERO_MEMORY, size); if (result == null) throw new OutOfMemoryException(); return result; }

// Copies count bytes from src to dst. The source and destination // blocks are permitted to overlap.

public static void Copy(void* src, void* dst, int count) { byte* ps = (byte*)src; byte* pd = (byte*)dst; if (ps > pd) { for (; count != 0; count--) *pd++ = *ps++; } else if (ps < pd) { for (ps += count, pd += count; count != 0; count--) *--pd = *--ps; } }

// Frees a memory block.

public static void Free(void* block) { if (!HeapFree(ph, 0, block)) throw new InvalidOperationException(); }

// Re-allocates a memory block. If the reallocation request is for a // larger size, the additional region of memory is automatically // initialized to zero.

public static void* ReAlloc(void* block, int size) { void* result = HeapReAlloc(ph, HEAP_ZERO_MEMORY, block, size); if (result == null) throw new OutOfMemoryException(); return result; }

// Returns the size of a memory block.

public static int SizeOf(void* block) { int result = HeapSize(ph, 0, block); if (result == -1) throw new InvalidOperationException(); return result; }

// Heap API flags

const int HEAP_ZERO_MEMORY = 0x00000008;

// Heap API functions

[DllImport("kernel32")] static extern int GetProcessHeap();

[DllImport("kernel32")] static extern void* HeapAlloc(int hHeap, int flags, int size);

[DllImport("kernel32")] static extern bool HeapFree(int hHeap, int flags, void* block);

332Copyright Microsoft Corporation 1999-2003. All Rights Reserved.

Document info
Document views996
Page views996
Page last viewedFri Dec 09 10:31:07 UTC 2016
Pages396
Paragraphs9401
Words133190

Comments