c++ malloc 예제

malloc 및 calloc()라는 이름은 메모리를 동적으로 할당하는 라이브러리 함수입니다. 즉, 힙 세그먼트에서 런타임(프로그램 실행) 중에 메모리가 할당됩니다. 두 번째 예로 m double 숫자를 저장하기에 충분한 메모리를 할당해야 한다는 점을 고려해 보겠습니다. 코드는 다음과 같습니다. f2의 malloc도 명백한 진단없이, 나쁜 될 것입니다. 여기서 예제는 간단하지만 실수로 비 POD를 훨씬 더 멀리 도입할 수 있습니다(예: 기본 클래스에서 비 POD 멤버를 추가함). C++11/boost가 있는 경우 is_pod를 사용하여 이 가정이 올바른지 확인하고 그렇지 않은 경우 오류가 발생합니다: C 라이브러리 함수 void *malloc(size_t size)은 요청된 메모리를 할당하고 포인터를 반환합니다. 위의 코드에서 함수 malloc은 n*sizeof(int) 바이트의 메모리를 할당하고 포인터 ptri 값을 반환합니다. 예를 들어 다음 코드는 두 개의 int 번호를 저장하기에 충분한 메모리를 할당합니다. 함수 malloc의 반환 값은 메모리 블록의 첫 번째 바이트의 주소인 ptri의 값입니다. 위의 선언에서 size_t는 서명되지 않은 정수 번호의 형식def입니다. int, double, char 등의 변수에 대한 메모리를 할당하려면 malloc () 에서 반환되는 void 포인터를 각각의 유형으로 캐스팅해야 합니다.

예를 들어, 배열의 요소와 같은 연속 메모리 위치에 n 정수를 저장하기 위해 메모리를 할당하려는 경우 코드는 아래에 제공된 대로 작성될 수 있습니다. 짧은 대답은 : 그렇게 하는 정말 좋은 이유없이 C ++에 대한 malloc을 사용하지 마십시오. malloc에는 C++와 함께 사용할 때 여러 가지 결함이 있으며, 이를 극복하기 위해 새로 정의되었습니다. 당신은 건설 / 파괴를 필요로하지 않고 재할당 (예를 들어, ints의 큰 배열)을 필요로하는 데이터로 작업하는 경우, 나는 그것이 당신에게 realloc을 제공으로 malloc / free가 좋은 선택이라고 생각, 이는 새로운 memcpy 삭제보다 훨씬 빠르다 (그것은 내 리눅스 상자에 있지만, 나는 추측 플랫폼에 따라 달라질 수 있습니다). POD가 아닌 C++ 객체로 작업하고 시공/소멸이 필요한 경우 새 연산자 및 삭제 연산을 사용해야 합니다. 새 및 삭제 연산자는 클래스 및 구조에서 작동할 수 있는 반면 malloc 및 free는 캐스팅해야 하는 메모리 블록으로만 작동합니다. 함수 malloc()은 void 포인터를 반환하므로 처리중인 데이터 유형에 캐스팅되어야 합니다. malloc()를 사용하는 경우 헤더 파일 가 프로그램에 포함되어야 합니다. 함수의 프로토타입은 아래에 있습니다. 마지막으로, 우리는 여전히 방에 코끼리가 있습니다 : C. C ++ 코드에 메모리가 할당되고 C 코드 (또는 다른 방법으로)에서 해제되는 C 라이브러리로 작업해야하는 경우 malloc / free를 사용하도록 강요받습니다.

나는 C ++에서 볼 수 있습니다 할당 및 무료 데이터를 가지고 있으며, 당신이 malloc을 호출 할 때 당신은 무료로 호출해야하고 새로운 연산을 사용할 때 당신은 삭제와 페어링해야하고 생성 된 무언가에 두 (예 : free(free)를 호출하는 것은 실수입니다 이해 새로운 연산자와 함께), 하지만 난 malloc/ 무료 를 사용 해야 하는 때 그리고 내 실제 프로그램에서 새/삭제를 사용 해야 하는 경우에 명확 하지 않다. 이 게시물에서는 C++의 새 및 malloc()에 대해 알아보려고 하며, 새 와 malloc()의 차이점은 무엇입니까? malloc은 의미있는 방식으로 타이핑 세이프가 아닙니다. C++에서는 무효*에서 반환을 발동해야 합니다.

Comments are closed.