C#

C# Advanced – csharpstudy 유튜브 강의 정리

 

https://www.csharpstudy.com/

https://www.youtube.com/watch?v=j0FYmsNvQbY&list=PLiNvMfa_Y5hcR5N0yFzi1KlK_e8zBaIrD

 

 

  1. 포인터와 레퍼런스의 차이는?

 

 

 


 

포인터와 레퍼런스의 차이는?

 

포인터 (Pointer)
void* p = &buff;
고정된 임의의 데이터에 대한 메모리 주소
Native Heap

 

레퍼런스 (Reference)
MyData obj = new MyData();
이동할 수 있는 객체에 대한 메모리 주소
Managed Heap
가비지 컬렉션이 발생하면 객체의 주소가 이동할 수 있다.

 

unsafe void ReferenceRun()
{
    for (int i = 0; i < 100000; i++)
    {
        var obj = new MyData();
    }

    var data = new MyData();
    data.Value = 55;

    // data 객체가 Managed Heap 에서 이동할 수 있기 때문에 data 객체를 고정시킨다.
    fixed (int* p = &data.Value)
    {
        Console.WriteLine("Address : {0}", (int)p);
    }

    for (int i = 0; i < 100000; i++)
    {
        var obj = new MyData();
    }

    GC.Collect();

    fixed (int* p = &data.Value)
    {
        Console.WriteLine("Address : {0}", (int)p);
    }
}

 

결과:
Address : 50993656 // 가비지 컬렉션 전 주소
Address : 49911440 // 가비지 컬렉션 후 주소

 

 


 

 

Related posts

Leave a Comment