정적 메모리 할당

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

정적 메모리 할당은 컴파일 시간에 메모리 크기가 결정되며, 프로그램 실행 중 크기 조절이 불가능한 메모리 할당 방식이다. 정적 할당된 메모리는 프로그램 종료 시 운영체제가 회수하며, 메모리 누수 문제를 신경 쓰지 않아도 된다는 장점이 있다. 하지만, 메모리 크기가 하드 코딩되어 변경이 어렵고, 스택에 할당되어 동적 할당에 비해 최대 메모리 크기에 제약이 따른다는 단점이 있다. C 언어에서는 스택에 메모리를 할당하며, C#에서는 `stackalloc` 키워드를 통해 값 형식에 한정하여 정적 할당을 지원한다.

정적 메모리 할당
📚 더 읽어볼만한 페이지
  • 메모리 관리 - 동적 메모리 할당
    동적 메모리 할당은 프로그램 실행 중 힙 영역에서 메모리 공간을 확보 및 해제하여 효율적인 메모리 관리와 유연성을 제공하는 기술로, 메모리 누수 방지 및 가비지 컬렉션 등의 고려 사항이 중요하며 C, C++, C++/CLI, C# 등에서 사용된다.
  • 메모리 관리 - 정적 변수
    정적 변수는 프로그램 실행 시간 동안 값을 유지하며, C 언어에서 `static` 키워드로 정의되어 함수 호출 간에 값을 유지하고, 객체 지향 프로그래밍에서 클래스의 모든 인스턴스에서 공유되는 클래스 변수로 사용된다.

2. 정적 메모리 할당의 장단점

정적 메모리 할당은 해제하지 않음으로 인한 메모리 누수와 같은 문제를 신경 쓰지 않아도 된다. 정적 할당된 메모리는 실행 도중에 해제되지 않고, 프로그램이 종료될 때 운영 체제가 회수하기 때문이다. 정적 메모리 할당은 컴파일 시간에 메모리 크기가 결정되므로, 프로그램 실행 중에 크기를 조절할 수 없다. 메모리의 크기가 하드 코딩되어 있어 나중에 변경이 불가능하며, 스택에 할당되기 때문에 동적 할당에 비해 할당받을 수 있는 최대 메모리 크기에 제약이 따른다.

2.1. 장점

정적 메모리 할당은 해제하지 않음으로 인한 메모리 누수와 같은 문제를 신경 쓰지 않아도 된다. 정적 할당된 메모리는 실행 도중에 해제되지 않고, 프로그램이 종료될 때 운영 체제가 회수하기 때문이다.

2.2. 단점

정적 메모리 할당은 컴파일 시간에 메모리 크기가 결정되므로, 프로그램 실행 중에 크기를 조절할 수 없다. 메모리의 크기가 하드 코딩되어 있어 나중에 변경이 불가능하며, 스택에 할당되기 때문에 동적 할당에 비해 할당받을 수 있는 최대 메모리 크기에 제약이 따른다.

3. 프로그래밍 언어별 정적 할당 방법

3.1. C 언어

C 언어에서 정적 할당된 메모리는 스택에 위치하게 된다.
```c
#define STATIC_ALLOC 100

#include
#include

void main()
{
char StaticAlloc[STATIC_ALLOC];
memset(StaticAlloc, 0, STATIC_ALLOC);
strcpy(StaticAlloc, "Hello, World!");

printf("StaticAlloc == %s\n", StaticAlloc);
printf("END\n");
getchar();
}

3.2. C# 언어

C#에서도 `stackalloc` 키워드를 통해 정적 할당을 지원한다. 단, 값 형식일 경우에만 가능하다.
```csharp
using System;
using System.Runtime.InteropServices;

public static class Test
{
public const int STATIC_ALLOC = 100;

public static void Main()
{
char* StaticAlloc = stackalloc char[STATIC_ALLOC];
string _tmp = "Hello, World!";
Marshal.Copy(_tmp.ToCharArray(), 0, (IntPtr)StaticAlloc, _tmp.Length);
}
}
```
C#에서 `stackalloc`은 스택에 메모리를 할당하는 데 사용되며, 이를 통해 포인터를 가져올 수 있다. `stackalloc`으로 할당된 메모리는 메서드 실행이 종료되면 자동으로 해제된다.