Exemplo n.º 1
0
        internal unsafe PMXObject()
        {
            var ptr = Marshal.AllocHGlobal(sizeof(PMXObject_));

            // Initialized memory for safety.
            *((PMXObject_ *)ptr) = default;

            UnmanagedMemoryChecker.RegisterNewAllocatedBytes(sizeof(PMXObject_));
            _ptr = ptr;
        }
Exemplo n.º 2
0
 internal RawString(ReadOnlySpan <byte> source, StringEncoding encoding)
 {
     if (source.Length == 0)
     {
         _headPointer = default;
         _byteLength  = default;
         Encoding     = encoding;
         return;
     }
     _headPointer = Marshal.AllocHGlobal(source.Length);
     _byteLength  = source.Length;
     Encoding     = encoding;
     source.CopyTo(new Span <byte>((void *)_headPointer, source.Length));
     UnmanagedMemoryChecker.RegisterNewAllocatedBytes(_byteLength);
 }
Exemplo n.º 3
0
        private void Dispose(bool disposing)
        {
            // thread-safe check
            var p = Interlocked.Exchange(ref Unsafe.AsRef(_ptr), IntPtr.Zero);

            if (p == IntPtr.Zero)
            {
                return;
            }

            ((PMXObject_ *)p)->Dispose();
            Marshal.FreeHGlobal(p);
            UnmanagedMemoryChecker.RegisterReleasedBytes(sizeof(PMXObject_));

            UnmanagedMemoryChecker.AssertResourceReleased();
        }