相关疑难解决方法(0)

调用QueryPerformanceCounter时会发生什么?

我正在研究在我们的系统中使用QueryPerformanceCounter的确切含义,并试图了解它对应用程序的影响.我可以看到在我的4核单CPU机器上运行它需要大约230ns才能运行.当我在24核4 cpu xeon上运行它需要大约1.4ms才能运行.更有趣的是,在我的机器上运行多个线程时,它们不会相互影响.但是在多CPU机器上,线程会导致某种交互,导致它们相互阻塞.我想知道他们都在查询总线上是否有一些共享资源?当我调用QueryPerformanceCounter时它到底发生了什么?它真正测量了什么?

c++ windows winapi timing

19
推荐指数
1
解决办法
6977
查看次数

unordered_map中的迭代器效率(C++)

我似乎无法找到任何关于此的信息,所以我转向stackoverflow.在C++中std :: tr1 :: unordered_map的迭代器效率如何?特别是与列表迭代器进行比较.创建一个包含类的包装类是否有意义,它还包含列表中的所有键以允许有效的迭代(我的代码在unordered_map中使用了大量的迭代).对于那些会推荐提升的人,我不能使用它(无论出于何种原因).

c++ iterator unordered-map

11
推荐指数
3
解决办法
9070
查看次数

小 N 的 std::map 与 unordered_map 内存占用

对于内存使用比速度更重要的嵌入式系统应用程序,最好使用什么地图容器?std::map, std::unordered_map? 这适用于N小于例如一百的情况。

如果实现很重要,那么我关心的是 libstdc++ 实现(GCC)。

虽然我知道不可能在内存使用方面击败简单的数组,但我想避免使用具有 O(N) 性能的数据结构。因此,虽然我想减少内存占用,但我也希望查找速度合理(优于 O(N))。我不关心其他操作(插入、删除),因为它们很少发生。

如果我想进行自己的内存使用测量,我将如何在 Linux 平台上执行此操作?

提振:: flat_map适合作为具有占地面积小和查找时间比O(n)的关联容器?

c++ optimization gcc dictionary c++11

6
推荐指数
1
解决办法
5117
查看次数

常量字符串的高效哈希映射

我需要映射常量大小的字符串,其中只包含字母数字值(AZ,0-9,没有小写字母)到其他字符串.unordered_map变得非常大(数千万个键),而映射的值来自几千个字符串的集合.在分析时,我发现大部分时间花在将新值插入地图(operator [])中,并且清除地图需要很长时间.

std::unordered_map<std::string, std::string> hashMap;
while (...){
    ...
    hashMap[key] = value;  // ~50% of program time is spent here
    ...
}

hashMap.clear();  // Takes a very long time, at this point hashMap.size() > 20,000,000
Run Code Online (Sandbox Code Playgroud)

我的想法是字符串分配/解除分配非常慢,以及散列和插入地图.有什么建议可以优化吗?请记住,密钥大小是常量,其内容限制为一组36个字符,并且映射的值来自有限集.我愿意使用除strings和unordered_map之外的不同容器/数据类型.

更新

根据Baum Mit Augen的建议,我将我的密钥类型更改为无符号long long,并创建了将base 36转换为decimal的函数:

unsigned long long ConvertBase36(const char* num)
{
    unsigned long long retVal = 0;

    for (int i = 0; i < 12; i++)
    {
        unsigned int digit = 0;
        char currChar = num[i];
        if (currChar <= '9')
        {
            digit = …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

6
推荐指数
1
解决办法
570
查看次数

是否存在平面未排序的地图/集实现?

boost.container flat_map和其他人一样,Loki AssocVector和许多其他人都喜欢这些元素.

是否有现代(c ++ 11移动启用等)实现的未分类矢量适合作为地图/集?

我的想法是将它用于非常小的地图/集(少于20个元素)和简单的密钥(对于这些密钥,散列并不总是有意义)

c++ containers boost stl c++11

5
推荐指数
1
解决办法
2625
查看次数