# 메모리 직접 관리

> 원문 출처\
> <https://developer.apple.com/documentation/swift/swift_standard_library/manual_memory_management>

주제

### 첫 스텝

* [포인터 파라미터를 사용하는 함수 호출](https://melod-it.gitbook.io/sagwa/app-frameworks/swift/swift-standard-library/manual-memory-management/calling-functions-with-pointer-parameters)\
  포인터를 파라미터로 받는 함수를 호출할때 암시적인 포인터 캐스팅이나 브릿징을 사용하세요.

### 타입이 결정된 포인터&#xD;

타입이 결정된 포인터와 버퍼를 사용해서 메모리의 특정 타입 인스턴스에 접근하세요

* struct [UnsafePointer](https://melod-it.gitbook.io/sagwa/app-frameworks/swift/swift-standard-library/manual-memory-management/unsafepointer)\
  특정 타입의 데이터에 접근하는 포인터
* struct UnsafeMutablePointer\
  특정 타입의 데이터에 접근하고 조작하는 포인터
* struct UnsafeBufferPointer\
  A nonowning collection interface to a buffer of elements stored contiguously in memory.
* struct UnsafeMutableBufferPointer\
  A nonowning collection interface to a buffer of mutable elements stored contiguously in memory.

### 원시 포인터&#xD;

raw 바이트를 저장하고 로딩하기 위해서 원시 포인터와 버퍼를 사용하세요.

* struct UnsafeRawPointer\
  타입이 정해지지 않은 데이터에 접근하는 원시 포인터
* struct UnsafeMutableRawPointer\
  타입이 정해지지 않은 데이터에 접근하고 조작하는 원시 포인터
* struct UnsafeRawBufferPointer\
  A nonowning collection interface to the bytes in a region of memory.
* [struct UnsafeMutableRawBufferPointer](https://melod-it.gitbook.io/sagwa/app-frameworks/swift/swift-standard-library/manual-memory-management/unsafemutablerawbufferpointer)\
  A mutable nonowning collection interface to the bytes in a region of memory.

### 메모리 접근

* func withUnsafePointer\<T, Result>(to: T, (UnsafePointer\<T>) -> Result) -> Result\
  주어진 인자에 대한 포인터를 사용하여 클로저를 실행합니다. `Beta`
* func withUnsafePointer(to: inout T, (UnsafePointer) -> Result) -> Result

  주어진 인자에 대한 포인터를 사용하여 클로저를 실행합니다.
* func withUnsafeMutablePointer(to: inout T, (UnsafeMutablePointer) -> Result) -> Result

  주어진 인자의 Mutable 포인터를 사용하여 클로저를 실행합니다.
* func withUnsafeBytes(of: T, (UnsafeRawBufferPointer) -> Result) -> Result

  주어진 인자의 raw byte를 커버하는 Buffer 포인터를 사용하여 클로저를 실행합니다. `Beta`
* func withUnsafeBytes(of: inout T, (UnsafeRawBufferPointer) -> Result) -> Result

  주어진 인자의 raw byte를 커버하는 Buffer 포인터를 사용하여 클로저를 실행합니다.
* func withUnsafeMutableBytes(of: inout T, (UnsafeMutableRawBufferPointer) -> Result) -> Result

  주어진 인자의 raw byte를 커버하는 Mutable buffer 포인터를 사용하여 클로저를 실행합니다.
* func swap(inout T, inout T)

  두 인자의 값을 바꿉니다.

### 메모리 레이아웃&#xD;

* enum MemoryLayout\
  The memory layout of a type, describing its size, stride, and alignment.

### 참조 카운팅

* struct Unmanaged\
  관리되지 않는 객체 참조를 전파하기 위한 타입
* func withExtendedLifetime(T, (T) -> Result) -> Result

  클로저가 반환되기 전에 주어진 인스턴스가 destroy 되지 않도록 보장하면서 클로저를 평가합니다.
* func withExtendedLifetime(T, () -> Result) -> Result\
  클로저가 반환되기 전에 주어진 인스턴스가 destroy 되지 않도록 보장하면서 클로저를 평가합니다.

## 같이 보기

### 프로그래밍 작업

* 입출력\
  값을 콘솔에 출력하고, 텍스트 스트림에 값을 쓰거나 읽고, 커맨드 라인 인자를 사용하세요.
* 디버깅과 반영\
  런타임 점검을 통해 코드를 강화하고 값의 런타임 표현을 검토합니다.
* Key-Path 표현법\
  Key-Path를 사용해서 프로퍼티에 동적으로 접근하세요.
* Type Casting and Existential Types\
  타입간에 캐스팅을 하거나 모든 타입의 값을 나타냅니다.
* C 상호운용성\
  import된 C 타입이나 C 가변함수를 사용하세요.
* 연산자 선언\
  접두어, 접미어 및 중위어 연산자로 작업하세요.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://melod-it.gitbook.io/sagwa/app-frameworks/swift/swift-standard-library/manual-memory-management.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
