小编Phạ*_*ông的帖子

英特尔®事务同步扩展新指令(TSX-NI)与英特尔TSX的区别是什么?

我在英特尔的页面上找到了

https://ark.intel.com/products/97123/Intel-Core-i5-7500-Processor-6M-Cache-up-to-3_80-GHz

该处理器支持TSX-NI技术但我在谷歌上找不到任何关于它的信息.它与英特尔TSX相同.如果它是不同的,那么我如何使用它.

对不起,我的英语不好!:)

c++ assembly tsx

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

在cmake项目中使用第三方库的正确方法

我正在研究使用某些第三方库的项目。我可以将它们作为克隆并放入我的项目中,git submodule并用于add_subdirectory在项目中使用它们。但是编译这些库需要很多时间,而且我无法cmake在项目中管理变量,而install()命令使我的程序包包含了许多我不需要的东西。

那么在我的项目中使用第三方库的正确方法是什么。我不能告诉客户端将这些库安装为我项目的依赖项。

cmake libraries

4
推荐指数
1
解决办法
4879
查看次数

由于不兼容的cv限定符而无法编译

我有两个模板方法

template <typename T, typename Ret, typename ...Args>
Ret apply(T* object, Ret(T::*method)(Args...), Args&& ...args) {
    return (object->*method)(std::forward(args)...);
};

template <typename T, typename Ret, typename ...Args>
Ret apply(T* object, Ret(T::*method)(Args...) const, Args&& ...args) {
    return (object->*method)(std::forward(args)...);
};
Run Code Online (Sandbox Code Playgroud)

我的目的是在这些args上应用T类的成员方法

这是我的测试代码:

int main() {
    using map_type = std::map<std::string, int>;
    map_type map;
    map.insert(std::make_pair("a", 1));
    std::cout << "Map size: " << apply(&map, &map_type::size) << std::endl; //this code work
    apply(&map, &map_type::insert, std::make_pair("a", 1)); //failed to compile

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是编译器错误消息:

    test.cpp: …
Run Code Online (Sandbox Code Playgroud)

c++ templates type-deduction

3
推荐指数
1
解决办法
751
查看次数

std::vector emplace 和 std::vector emplace 返回成对

我有这个代码:

std::vector<std::pair<const std::string, int>> vec;

vec.emplace_back("a", 1); //success
vec.emplace(vec.end(), "b", 2); //compile error

vec.emplace_back(std::make_pair<const std::string, int>("c", 3));  //success
vec.emplace(vec.end(),
     std::make_pair<const std::string, int>("d", 4)); //compile error
Run Code Online (Sandbox Code Playgroud)

你能解释一下为什么吗?

c++ stl vector c++11 emplace

3
推荐指数
1
解决办法
8097
查看次数

如何在cmake中静态链接到glibc

我正在尝试从Fedora构建一个可以在RedHat 6机器上运行的软件包。因此,我需要与RedHat机器中不存在的某些库进行构建和静态链接。我发现我可以-static-libgcc-static-libstdc++与标准库的静态版本链接,但是我不知道该怎么做glibc。如何链接到glibcCMake的静态库?

对不起,我的英语不好。

cmake software-packaging static-linking

3
推荐指数
1
解决办法
3297
查看次数

如何使用 perf 探针打印 malloc 大小函数

我想跟踪我的程序以了解程序的内存分配。这个想法是每当调用 malloc 时,它都会打印出带有 allocate 的调用堆栈size。这是我用来创建事件的命令:

perf probe -x /lib64/libc.so.6 'malloc allocated=-8(%bp):u64'
Run Code Online (Sandbox Code Playgroud)

perf report要告诉我allocated这件事的记忆是不正确的。我怎样才能解决这个问题。

我认为这个问题偏移到size-8(%bp))是不正确的。但我不知道 asm 所以我无法理解 libc 二进制文件。

更新:使用简单的程序,例如:

for (int i=0; i<10; i++)
    malloc(i);
Run Code Online (Sandbox Code Playgroud)

然后我可以看到如果我用 编译的话结果是正确的O0。我编译的结果O3不正确。并用我的大程序(数十万行代码)进行编译,O0但它不能给我正确的结果。

trace perf

0
推荐指数
1
解决办法
1654
查看次数