표준 메모리 할당을 사용자 지정 구현으로 전역적으로 바꾸는 방법
Stack Overflow에 대한 이전 논의에도 불구하고 새 메모리 할당을 전역적으로 재정의하는 데 어려움을 겪을 수 있습니다. 사용자 정의 구현으로 연산자를 삭제합니다. 이 문서에서는 표준 연산자를 효과적으로 대체하고 코드베이스 전체에서 사용자 정의 메모리 관리자의 일관된 사용을 보장하는 수정된 솔루션을 제공합니다.
이 전역 대체를 수행하려면 다음을 정의하는 별도의 번역 단위(TU)를 생성해야 합니다. 이 연산자들. 예는 다음과 같습니다.
<code class="cpp">// optional_ops.cpp void * operator new(std::size_t n) throw(std::bad_alloc) { // ... Your custom memory allocation logic here } void operator delete(void * p) throw() { // ... Your custom memory deallocation logic here }</code>
일반 함수와 달리 연산자 new 및 연산자 delete에 대한 선언은 언어에 암시적으로 정의됩니다. 따라서 이를 선언하기 위해 별도의 헤더 파일이 필요하지 않습니다. 그러나 STL을 사용하므로
C 11 및 Beyond Enhancements
C 11 이상에서는 추가 옵션이 있습니다. 이러한 연산자를 정의하려면:
다음은 다음과 같습니다. 이러한 개선 사항을 사용하여 업데이트된 연산자 new 정의의 예:
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false) { // ... Your custom memory allocation logic here }</code>
사용자 정의 연산자 정의가 포함된 TU를 코드베이스에 연결하면 표준 new 및 delete 연산자를 전체적으로 바꿀 수 있습니다. 이렇게 하면 모든 메모리 할당 및 할당 취소 호출에서 사용자 정의 구현을 사용하여 STL 및 기타 라이브러리의 혼합 연산자 사용에 대한 우려를 해결할 수 있습니다.
위 내용은 C에서 표준 메모리 할당을 사용자 정의 구현으로 전역적으로 바꾸는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!