malloc 함수 예제

Skrevs fredagen den 2 augusti, 2019

malloc이 있는 유용한 관용구는 이 예제에 나와 있습니다. 이 작업은 포인터가 가리키는 이전 영역과 동일한 데이터를 포함하는 지정된 크기의 메모리 영역에 대한 포인터를 반환하는 realloc을 사용하여 수행할 수 있습니다(이전 크기와 새 크기의 최소로 잘린). realloc이 메모리 영역의 크기를 조정할 수 있는 경우 새 저장소를 할당하고 필요한 데이터를 복사하며 이전 포인터를 해제합니다. 이 할당이 실패하면 realloc는 원래 포인터를 변경되지 않고 유지하고 null 포인터 값을 반환합니다. 확장의 경우 복사된 이전 데이터 외부의 새 메모리 영역은 초기화되지 않습니다(내용은 예측할 수 없습니다). 함수 프로토타입은 malloc 및 관련 함수의 부적절한 사용이 버그의 원인이 될 수 있습니다. 이 예제에서는 malloc 함수를 사용 하 고 byte_size (N * sizeof (int)) 어디, N의 값은 사용자에 의해 제공 됩니다. 메모리 영역을 할당하여 크기 nelements × elementSize의 0으로 초기화합니다. 아래 예제와 같이 문자열을 보유하는 문자 배열을 할당할 때 유용할 수 있습니다. ar *). 우리가 튜토리얼을 종료하기 전에 마지막 팁 : 항상 sizeof를 사용합니다. 이 표기표 malloc (4)을 사용하지 마십시오.

(예제에서 정수에 대해 4바이트 요청). 이렇게하면 코드가 훨씬 더 이식성이 높아집니다. OpenBSD의 malloc 함수 구현은 mmap을 사용합니다. 한 페이지보다 큰 요청의 경우 mmap을 사용하여 전체 할당이 검색됩니다. mmap으로 할당된 여러 ”버킷 페이지” 내에서 malloc에서 유지 관리하는 메모리 풀에서 더 작은 크기가 할당됩니다. 사용 대기 를 호출할 때 munmap을 사용하여 프로세스 주소 공간에서 메모리가 해제되고 매핑되지 않습니다. 이 시스템은 OpenBSD의 mmap 시스템 호출의 일부로 구현된 주소 공간 레이아웃 무작위화 및 간격 페이지 기능을 활용하여 보안을 개선하고 대규모 메모리 할당이 완전히 매핑되지 않은 경우 사용 후 버그를 감지하도록 설계되었습니다. 해제된 후 추가 사용으로 인해 세분화 오류 및 프로그램 종료가 발생합니다. 메모리 양이 더 이상 필요하지 않은 경우 함수를 무료로 호출하여 운영 체제로 반환해야 합니다.

Teater Kapija
Örmölla 321
SE-274 56 Abbekås

+46 (0)411 533 772
+46 (0)70 740 17 61

info@kapija.com
www.kapija.com