Απολυμάνσεις Αθήνα

동적메모리 할당 예제

150 150 trap

이 프로그램에서는 malloc() 함수를 사용하여 런타임에 int, char 및 float 변수에 대한 메모리를 만들고 프로그램을 종료하기 전에 free() 함수를 사용하여 런타임에 할당된 메모리를 해제합니다. “사용” 메서드는 메모리를 동적으로 할당 해제하는 데 사용됩니다. 함수 malloc() 및 calloc()를 사용하여 할당된 메모리는 자체적으로 할당 해제되지 않습니다. 따라서 동적 메모리 할당이 수행될 때마다 free() 메서드가 사용됩니다. 그것은 그것을 해제 하 여 메모리의 낭비를 줄일 수 있습니다. 동적 배열을 사용하면 필요에 따라 요소 수를 늘릴 수 있습니다. 그들은 널리 컴퓨터 과학 알고리즘에 사용됩니다. realloc() 함수를 사용하면 이미 할당된 메모리에 메모리 크기를 더 추가할 수 있습니다. 원래 콘텐츠를 그대로 유지하면서 현재 블록을 확장합니다. realloc는 메모리의 재할당을 의미합니다.

C는 이러한 작업을 달성하기 위한 몇 가지 기능을 제공합니다. C 프로그래밍에서 동적 메모리 할당을 용이하게하기 위해 헤더 파일 아래에 정의 된 C에서 제공하는 4 개의 라이브러리 함수가 있습니다. 그들은 : 왜 우리는 이것의 또 다른 할당 방법을 도입해야합니까? 프로그램이 실행되는 동안 메모리를 할당해야 하는 이유는 무엇입니까? 노골적으로 보이지 는 않지만 런타임 동안 메모리를 할당할 수 없기 때문에 유연성과 공간 효율성이 저하됩니다. 특히, 입력을 미리 알 수 없는 경우, 우리는 비효율적인 저장소 사용과 데이터를 입력할 슬롯의 부족 또는 과잉(항목을 저장하는 배열 또는 유사한 데이터 구조가 주어지음)의 측면에서 어려움을 겪습니다. 따라서 여기서는 동적 메모리 할당을 정의합니다: 런타임 동안 저장소/메모리/셀을 변수에 할당할 수 있는 메커니즘을 동적 메모리 할당(DMA와 혼동하지 않음)이라고 합니다. 그래서, 우리가 모든 것을 겪고있다, 우리는 우리가 원하는만큼 스토리지를 사용할 수 있도록 실행 시간 동안 메모리를 할당 알 수 있습니다, 어떤 낭비에 대해 걱정하지 않고. 라이브러리에는 동적 메모리 관리를 담당하는 기능이 있습니다. 기본 데이터 형식을 사용 하 여 변수를 선언 하는 경우 C 컴파일러는 자동으로 스택 이라는 메모리 풀에서 변수에 대 한 메모리 공간을 할당 합니다. 이렇게 하면 10개의 정수가 메모리에서 차지하는 바이트 수를 계산한 다음 malloc에서 많은 바이트를 요청하고 결과를 포인터라는 배열에 할당합니다(C 구문, 포인터 및 배열로 인해 경우에 따라 상호 교환적으로 사용될 수 있음). 이 섹션에서는 동적 메모리 할당을 사용하는 프로그램의 여기에 이러한 기능을 사용하여 프로그래밍을 배울 것입니다. calloc 함수에 의해 할당 된 메모리 블록은 항상 0으로 초기화되고 malloc에서는 항상 가비지 값을 포함합니다. 따라서 동적 메모리 할당은 런타임 중에 데이터 구조(예: Array)의 크기가 변경되는 프로시저로 정의할 수 있습니다.

동적 메모리 할당을 잘못 사용하면 버그의 원인이 될 수 있습니다. 여기에는 세분화 오류로 인해 보안 버그 또는 프로그램 충돌이 포함될 수 있습니다. mmap 임계값(“largebin” 요청)을 초과하는 요청의 경우 mmap 시스템 호출을 사용하여 항상 메모리가 할당됩니다. 임계값은 일반적으로 256KB입니다. [15] mmap 메서드는 만료 후 마지막에 작은 할당을 트래핑하는 거대한 버퍼문제를 피하지만, 항상 많은 아키텍처에서 4096바이트 크기의 전체 메모리 페이지를 할당합니다. [16] 사용 가능한 기억의 두 가지 유형이 있습니다 – 스택 및 힙. 정적 메모리 할당은 스택에서만 수행할 수 있지만 동적 메모리 할당은 스택과 힙 모두에서 수행할 수 있습니다. 스택에서 수행할 동적 할당의 예는 함수가 발생 순서대로 호출 스택에 넣고 기본 케이스에 도달할 때 하나씩 튀어 나온 재귀입니다. 힙에 동적 메모리 할당의 예는 다음과 같이 메모리 부족과 같은 메모리 공간을 할당하는 오류가 있을 때마다 null 포인터가 반환됩니다.

  • 0