>백엔드 개발 >C++ >C에서 표준 메모리 할당을 사용자 정의 구현으로 전역적으로 바꾸는 방법은 무엇입니까?

C에서 표준 메모리 할당을 사용자 정의 구현으로 전역적으로 바꾸는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-01 07:10:02643검색

How to Globally Replace Standard Memory Allocation with Custom Implementations in C  ?

표준 메모리 할당을 사용자 지정 구현으로 전역적으로 바꾸는 방법

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을 사용하므로 또는 std, std::bad_alloc 및 std::size_t에 대한 정의를 제공합니다.

C 11 및 Beyond Enhancements

C 11 이상에서는 추가 옵션이 있습니다. 이러한 연산자를 정의하려면:

  • decltype(sizeof(0)): std::size_t를 사용하는 대신 이 대체 구문을 사용하여 첫 번째 매개변수의 크기를 가져올 수 있습니다. 외부 라이브러리에 의존하지 않고.
  • noException(false): 이 구문은 오래된 동적 예외 사양을 대체하고 연산자가 예외를 발생시킬 수 있음을 나타냅니다.

다음은 다음과 같습니다. 이러한 개선 사항을 사용하여 업데이트된 연산자 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.