C# 獲取變量或對象的棧與堆地址


  public class RAM
    {

        public void Test()
        {
            try
            {
                int num_Size = 100000000;

                var addr = getMemory(num_Size);
                Console.WriteLine("num_Size addr = " + addr);

                Person pp = new Person();
                pp.Id = 99;
                pp.Name = "test";
                pp.Sex = "nan";
                var addr2 = getMemory(pp);
                Console.WriteLine("num_Size addr = " + addr2);

            }
            catch (Exception ex)
            {

            }
        }


        public string getMemory(object o) // 獲取引用類型的內存地址方法    
        {
            GCHandle h = GCHandle.Alloc(o, GCHandleType.WeakTrackResurrection);

            IntPtr addr = GCHandle.ToIntPtr(h);

            return "0x" + addr.ToString("X");
        }

    }


    [StructLayout(LayoutKind.Sequential)]
    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
    }

函數調用的基本原理:http://www.cnblogs.com/swiftma/p/5468104.html 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM