// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. // This source code is licensed under both the GPLv2 (found in the // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). #pragma once #include #include #ifdef USE_FOLLY #include #endif #include "rocksdb/rocksdb_namespace.h" namespace ROCKSDB_NAMESPACE { // Helper methods to estimate memroy usage by std containers. template size_t ApproximateMemoryUsage( const std::unordered_map& umap) { using Map = std::unordered_map; return sizeof(umap) + // Size of all items plus a next pointer for each item. (sizeof(typename Map::value_type) + sizeof(void*)) * umap.size() + // Size of hash buckets. umap.bucket_count() * sizeof(void*); } #ifdef USE_FOLLY template size_t ApproximateMemoryUsage(const folly::F14FastMap& umap) { return sizeof(umap) + umap.getAllocatedMemorySize(); } #endif } // namespace ROCKSDB_NAMESPACE