X : 내 프로그램의 각 부분에서 사용하는 메모리 양을 알아야합니다. 내 프로그램은 C++ 표준 라이브러리를 많이 사용한다. 특히 각 객체가 사용하는 메모리 양을 알고 싶습니다.std :: containers에 대한 로깅 할당 자?
것은 내가하고 있어요 방법 :은 loggin에 할당이로 구현됩니다
namespace my {
template<class T, class S>
using vector = std::vector<T,LoggingAllocator<T,S>>;
}
은 다음과 위치를 바로
my::vector<double,MPLLIBS_STRING("some_vector")> some_vector;
쓰기, some_vector
의 소비 로그 :
template<class T, class S = MPLLIBS_STRING("unknown")> struct LoggingAllocator {
// ... boilerplate ...
pointer allocate (size_type n, std::allocator<void>::const_pointer hint = 0) {
log_allocation(boost::mpl::c_str<S>::value);
// allocate_memory (I need to handle it myself)
}
void destroy (pointer p) ; // logs destruction
void deallocate (pointer p, size_type num); // logs deallocation
};
Que stion : 일반적인 방법으로이 동작을 얻는 더 좋은 방법이 있습니까? 더 나은 내 말함으로써, 간단하게, 더 좋은, boost::mpl
및 mpllibs::metaparse
에 의존하지 않고, ... 이상적으로 난 그냥
my::vector<double,"some_vector"> some_vector;
를 작성하고 그것을 함께 할 수 싶습니다.
그건 나에게 꽤 일반적인 것처럼 보입니다. 더 일반적인 것을 원하십니까? – PlasmaHH
질문에 대한 대답은 아니지만 개발자 만 메모리 사용을 알아야하는 경우 전체 코드베이스를 측정하는 것보다 메모리 프로파일 링을 사용하는 것이 좋습니다. – daramarak
@daramarak : 그것은 정말로, 당신이 원하는 것과 당신이 사용할 수있는 도구에 달려 있습니다; 예를 들어, Massif를 좋아하는 한, Production에서 사용할 수있는 것과는 달리 간단한 로거가 가능할 수 있습니다. –