Managed Memory

CLR(Common Language Runtime)이 관리하는 메모리. Garbage Collection의 대상이 된다.

Unmanaged Memory

Managed Memory가 아닌 것.

C# 에서도 C++ 에서처럼 직접 메모리를 할당 할 수 있다.

IntPtr memory = Marshal.AllocHGlobal(100);
for (int i = 0; i < 100; ++i)
{
    ((byte*) memory)[i] = (byte)(i + 1);
}
Marshal.FreeHGlobal(memory);

stackalloc 표현식

Stack 에 메모리가 할당됨. 그 Stack을 벗어날 때 자동으로 메모리 해제.

일시적인 계산을 위한 메모리를 사용할 때, stackalloc을 사용함으로써 Managed Heap에 할당되지 않게 하여 최적화 가능.

public void RemoveAll() // Dash.Core.Systems.GeneratorSystem
{
    Span<int> serials = stackalloc int[_generators.Count];

    int index = 0;
    foreach (int serial in _generators.Keys)
    {
        serials[index++] = serial;
    }

    foreach (int serial in serials)
    {
        _generators.Remove(serial);
    }
}

사견

C#을 막연하게 C, C++ 보다 느리다고 생각하는 사람들이 많다.
심지어 C#을 메인 스킬로 다루는 사람들까지도.

어떤 부분에서 퍼포먼스가 떨어지는 것인지, 그걸 해결하기 위한 방법이 있는지에 대해
자세히 알아야 할 필요가 있다고 생각한다.


N년간 C# / .Net에 관심을 가저오며 지금은 **C#으로도 *High Performance Program*을 만들 수 있다, 하지만 쉽지 않을 것이다** 라는 결론에 도달했다.

그렇게 생각하게 된 이유를 공유하고 싶고,
.Net 및 Managed Langauge에 대한 편견을 없애보고 싶다.