변경 typedef vector<vector<string>> VARTYPE_T;
typedef deque<deque<string>> VARTYPE_T;
에 여전히 메모리 조각화가 있는지 확인합니다.
그런데 VS 2008 SP1로 어떻게 측정합니까?
업데이트 : HP가 HP-UX 메모리 조각화를 처리하는 방법을 알고 있습니다. 약간 수색을 한 후에 나는 재미있는 연결 Low-fragmentation Heap를 찾아 냈다. 이것은 견적 : The low-fragmentation heap (LFH) helps to reduce heap fragmentation
입니다. 내 설명은 흥미 롭다. HP가 메모리 조각화에 대한 접근 방식을 닮았 기 때문이다. 나는 (deque를 사용하는 것 이외에) 시도하고 확인하는 또 하나의 좋은 아이디어라고 생각한다. '
업데이트 2 : 1) 속도. 전에 속도에 대해 말한 적이 없으므로 좋은 조언을주기 위해 어떤 지침도 가지고 있지 않습니다. 나는 또한 당신의 프로그램이 실행되는 동안 대부분의 시간을 보낸다는 것을 모른다.
문자열을 long 및 double로 변환하는 데 주로 소요되는 시간이라면이 변환을 한 번만 수행하고 변수 값에 액세스 할 때 사용해야합니다. 문자열이 아닌 실제 값을 저장하는 것이 좋습니다. 예를 들어, 유니온 또는 Boost.Variant에서. 변수에 값에 빠르게 액세스 할 수있는 인덱스가 없다고 생각하면 이러한 인덱스를 추가해야합니다.
2) 메모리 사용량. 며칠 동안 실행되는 서버 응용 프로그램을 실제로 작성하고 있으며 메모리 사용량에 대해 많은 관심을 기울여야합니까? 그런 다음 이미 말씀 드린 바, Windows에서 Low-fragmentation Heap
을 사용하고 16K보다 적은 블록 크기를 사용하십시오. 또한 메모리 누출을 제거하십시오. 물론 그것을 확인하지만 내가 이해하는 한 Low-fragmentation Heap
당신이 뉴스를 처리해야합니다.
3) 서버 응용 프로그램을 작성하면 std :: vector가 때때로 좋은 선택이 아닙니다. 한 블록에 메모리를 할당합니다. 16K 이상이면 메모리 단편화가 발생할 수 있습니다.
4) 마지막으로, 가 메모리 할당에 대한 HP-UX에서 좋은 보고서)는 메모리 단편화를 찾기 위해 (처럼 보이는 방법을 찾습니다 등등
Actual Heap Usage:
Heap Start = 0x60000000000fea38
Heap End = 0x6000000026580000
Heap Size = 642258376 bytes
Outstanding Allocations:
251948524 bytes allocated in 4239425 blocks
Detailed Report
-------------------------------------------------------------------------
65343264 bytes in 1361318 blocks (25.94% of all bytes allocated)
These range in size from 48 to 48 bytes and are allocated
#0 stlp_std::__malloc_alloc::allocate(unsigned long&) from ./libstlport.so.5.1
#1 boost::multi_index::detail::ordered_index<boost::multi_index::identity<csubs::clnt_tax_hist_t>, stlp_std::less<csubs::clnt_tax_hist_t>, boost::multi_index::detail::nth_layer<1, csubs::clnt_tax_hist_t, boost::multi_index::indexed_by<boost::multi_index::ordered_non_unique<boost::multi_index::identity<csubs::clnt_tax_hist_t>, mpl_::na, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, hrs_allocator::counting_allocator<csubs::clnt_tax_hist_t, (hrs_allocator::allocator_enums)9> >, boost::mpl::vector0<mpl_::na>, boost::multi_index::detail::ordered_non_unique_tag>::insert(csubs::clnt_tax_hist_t const&) at _alloc.h:381
-------------------------------------------------------------------------
47510512 bytes in 848402 blocks (18.86% of all bytes allocated)
These range in size from 56 to 56 bytes and are allocated
#0 stlp_std::__malloc_alloc::allocate(unsigned long&) from ./libstlport.so.5.1
#1 csubs::cache_impl<csubs::subs_data_t, csubs::search_policy_range<false>, csubs::erase_policy_range, hrs_allocator::counting_allocator<csubs::subs_data_t, (hrs_allocator::allocator_enums)5>, boost::multi_index::multi_index_container<csubs::subs_data_t, boost::multi_index::indexed_by<boost::multi_index::ordered_non_unique<boost::multi_index::identity<csubs::subs_data_t>, mpl_::na, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, hrs_allocator::counting_allocator<csubs::subs_data_t, (hrs_allocator::allocator_enums)5> > >::put(csubs::subs_data_t const&) at _alloc.h:381
#2 csubs::db_cache_loader<csubs::cache_impl<csubs::subs_data_t, csubs::search_policy_range<false>, csubs::erase_policy_range, hrs_allocator::counting_allocator<csubs::subs_data_t, (hrs_allocator::allocator_enums)5>, boost::multi_index::multi_index_container<csubs::subs_data_t, boost::multi_index::indexed_by<boost::multi_index::ordered_non_unique<boost::multi_index::identity<csubs::subs_data_t>, mpl_::na, mpl_::na>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, hrs_allocator::counting_allocator<csubs::subs_data_t, (hrs_allocator::allocator_enums)5> > >, csubs::ctrl_loader_nocheck>::operation() at cache_subs_loaders.h:121
#3 csubs::group_subs_cache::load_caches_from_db(db_date const&, csubs::cache_options const&, otl_connect&, csubs::cache_stat*) at ./caches/cache_subs_caches.cpp:1452
하고 있습니다.
VC++로 반복 검사와 같은 안전 기능을 해제 했습니까? – UncleBens