>백엔드 개발 >C++ >Valgrind가 ``를 사용하는 간단한 프로그램으로 여전히 접근 가능한 메모리를 보고하는 이유는 무엇입니까?

Valgrind가 ``를 사용하는 간단한 프로그램으로 여전히 접근 가능한 메모리를 보고하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-29 01:47:10318검색

Why Does Valgrind Report Still Reachable Memory with a Trivial Program Using ``?

Valgrind: 을 사용하는 간단한 프로그램으로 메모리에 여전히 접근 가능

이 질문은 시스템에서 여전히 접근 가능한 메모리에 대한 Valgrind 경고에 관한 것입니다. header.

문제:

헤더는 여전히 접근 가능한 메모리에 대한 Valgrind 경고를 생성합니다. 표준 라이브러리의 개체가 프로그램 자체에 할당되지 않았기 때문에 이는 예상치 못한 일입니다.

#include <iostream>

int main() {
  return 0;
}

답변:

Valgrind 경고는 버그가 아니라 특징. C 표준 라이브러리의 많은 구현에서는 자체 메모리 풀 할당자를 사용합니다. 파괴된 객체에 대한 메모리는 즉시 해제되어 OS에 다시 제공되지 않고 나중에 재사용할 수 있도록 풀에 보관됩니다. 프로그램이 종료될 때 메모리 풀도 해제되지 않으므로 Valgrind는 메모리에 여전히 접근 가능한 것으로 보고합니다.

해결책:

풀 캐싱을 비활성화하는 방법에는 여러 가지가 있습니다. STL이 malloc을 사용하고 메모리를 해제하도록 강제합니다. 가능:

  • GCC 2.91 ~ 3.1:
g++ -D__USE_MALLOC ...
  • GCC 3.2.2 및 이후:
export GLIBCPP_FORCE_NEW=1
  • GCC 3.4 이상:
export GLIBCXX_FORCE_NEW=1

추가 참고:

  • 이 해결 방법은 프로그램 속도를 저하시킬 수 있습니다.
  • 이 동작은 라이브러리의 버그가 아니라 성능을 향상시키기 위한 기능입니다.
  • 는 메모리 풀 할당자를 사용하지 않기 때문에 이 문제가 발생하지 않습니다.

위 내용은 Valgrind가 ``를 사용하는 간단한 프로그램으로 여전히 접근 가능한 메모리를 보고하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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