小编Sea*_*ean的帖子

DESTDIR和PRE的PRE

我正在尝试将软件安装到特定目录.我找到了几种方法,但不确定它们之间有什么区别.

  1. ./configure --prefix=***
  2. make install DESTDIR=***
  3. make install prefix=***
  4. ./configure --prefix=***

我对这四个的功能感到困惑.他们实现了同样的目标吗?

c linux bash makefile configure

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

C++中的函数隐藏和使用声明

我的困惑来自"C++ Primer 5th edition"第13.3节,第518页.

非常仔细的读者可能想知道为什么using里面的声明swap不会隐藏HasPtr版本的声明swap.

我试图阅读它的参考但仍然不明白为什么.有人可以解释一下吗?谢谢.这是问题的代码示例.

假设类Foo有一个名为的成员h,它具有类型HasPtr.

void swap(HasPtr &lhs, HasPtr &rhs)
{...}

void swap(Foo &lhs, Foo &rhs)
{
    using std::swap;
    swap(lhs.h, rhs.h);
}
Run Code Online (Sandbox Code Playgroud)

为什么swap对于HasPtr没有隐藏这似乎在外部范围中声明,而using std::swap在内部范围?谢谢.

c++ scope namespaces

14
推荐指数
2
解决办法
1163
查看次数

copy_backward和reverse_copy之间的区别?

我正在阅读C++入门并看到这两个似乎具有相同功能的函数.谁能帮忙告诉我两者有什么区别?谢谢.

c++ stl generic-programming c++-standard-library

7
推荐指数
1
解决办法
1138
查看次数

Intel指令的LOCK前缀.有什么意义?

我阅读了英特尔手册,发现指令有一个锁定前缀,可以防止处理器同时写入同一个内存位置.我很兴奋.我想它可以用作硬件互斥.所以我写了一段代码来拍摄.结果非常令人沮丧.锁不支持MOV或LEA指令.手册说LOCK仅支持ADD,ADC,AND,BTC,BTR,BTS,CMPXCHG,CMPXCH8B,DEC,INC,NEG,NOT,OR,SBB,SUB,XOR,XADD和XCHG.而且,如果LOCK前缀与这些指令之一一起使用并且源操作数是存储器操作数,则可以生成未定义的操作码异常(#UD).

我想知道为什么这么多限制,如此多的限制使得LOCK看起来毫无用处.我不能用它来保证一般的写操作没有脏数据或并行引起的其他问题.

例如,我在C中编写了代码++(*p).p是指向共享内存的指针.相应的程序集如下:

movl    28(%esp), %eax
movl    (%eax), %eax
leal    1(%eax), %edx
movl    28(%esp), %eax
movl    %edx, (%eax)
Run Code Online (Sandbox Code Playgroud)

我在"movl"和"leal"之前添加了"lock",但是处理器抱怨"无效指令".:-(我想将序列化写操作的唯一方法是使用软件互斥,对吧?

c linux parallel-processing assembly intel

5
推荐指数
2
解决办法
9913
查看次数

编译Trilinos源代码时,汇编程序收到垃圾错误消息

我正在从源代码编译Trilinos并得到一个错误,它抱怨垃圾部分.我的内核版本3.13.0和我的g ++版本是4.8.2.我在x86_64机器上运行.错误消息如下所示:

scalar_field.s:24649: Error: junk `@104.5037' after expression
Run Code Online (Sandbox Code Playgroud)

命令运行是

cd /home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/ForTrilinos/example/ADT_3D_Burgers_6th_Pade && /usr/bin/gfortran   -ffree-line-length-none -g -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD -I/home/shuang/trilinos-12.0.1-Source/packages/ForTrilinos/src/epetra -I/home/shuang/trilinos-12.0.1-Source/packages/ForTrilinos/src/teuchos -I/home/shuang/trilinos-12.0.1-Source/packages/ForTrilinos/src/amesos -I/home/shuang/trilinos-12.0.1-Source/packages/ForTrilinos/src/aztecoo -I/home/shuang/trilinos-12.0.1-Source/packages/ForTrilinos/src/galeri -I/home/shuang/trilinos-12.0.1-Source/packages/ForTrilinos/src/ifpack -I/home/shuang/trilinos-12.0.1-Source/packages/ForTrilinos/src/pliris -I/home/shuang/trilinos-12.0.1-Source -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/ForTrilinos/src -I/home/shuang/trilinos-12.0.1-Source/packages/ForTrilinos/src -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/ForTrilinos/src/mod -I/home/shuang/trilinos-12.0.1-Source/packages/CTrilinos/src/epetra -I/home/shuang/trilinos-12.0.1-Source/packages/CTrilinos/src/teuchos -I/home/shuang/trilinos-12.0.1-Source/packages/CTrilinos/src/amesos -I/home/shuang/trilinos-12.0.1-Source/packages/CTrilinos/src/aztecoo -I/home/shuang/trilinos-12.0.1-Source/packages/CTrilinos/src/galeri -I/home/shuang/trilinos-12.0.1-Source/packages/CTrilinos/src/ifpack -I/home/shuang/trilinos-12.0.1-Source/packages/CTrilinos/src/pliris -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/CTrilinos/src -I/home/shuang/trilinos-12.0.1-Source/packages/CTrilinos/src -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/ifpack/src -I/home/shuang/trilinos-12.0.1-Source/packages/ifpack/src -I/home/shuang/trilinos-12.0.1-Source/packages/ifpack/../amesos/src/SuiteSparse/AMD/Include -I/home/shuang/trilinos-12.0.1-Source/packages/ifpack/../amesos/src/SuiteSparse/UFconfig -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/amesos/src -I/home/shuang/trilinos-12.0.1-Source/packages/amesos/src -I/home/shuang/trilinos-12.0.1-Source/packages/amesos/src/SuiteSparse/AMD/Include -I/home/shuang/trilinos-12.0.1-Source/packages/amesos/src/SuiteSparse/COLAMD/Include -I/home/shuang/trilinos-12.0.1-Source/packages/amesos/src/SuiteSparse/CHOLMOD/Include -I/home/shuang/trilinos-12.0.1-Source/packages/amesos/src/SuiteSparse/UFconfig -I/home/shuang/trilinos-12.0.1-Source/packages/amesos/src/SuiteSparse/KLU/Include -I/home/shuang/trilinos-12.0.1-Source/packages/amesos/src/SuiteSparse/BTF/Include -I/home/shuang/trilinos-12.0.1-Source/packages/amesos/src/SuiteSparse/CAMD/Include -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/epetraext/src -I/home/shuang/trilinos-12.0.1-Source/packages/epetraext/src -I/home/shuang/trilinos-12.0.1-Source/packages/epetraext/src/transform -I/home/shuang/trilinos-12.0.1-Source/packages/epetraext/src/inout -I/home/shuang/trilinos-12.0.1-Source/packages/epetraext/src/coloring -I/home/shuang/trilinos-12.0.1-Source/packages/epetraext/src/model_evaluator -I/home/shuang/trilinos-12.0.1-Source/packages/epetraext/src/block -I/home/shuang/trilinos-12.0.1-Source/packages/epetraext/src/restrict -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/triutils/src -I/home/shuang/trilinos-12.0.1-Source/packages/triutils/src -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/epetra/src -I/home/shuang/trilinos-12.0.1-Source/packages/epetra/src -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/teuchos/kokkoscomm/src -I/home/shuang/trilinos-12.0.1-Source/packages/teuchos/kokkoscomm/src -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/teuchos/kokkoscompat/src -I/home/shuang/trilinos-12.0.1-Source/packages/teuchos/kokkoscompat/src -I/home/shuang/trilinos-12.0.1-Source/packages/teuchos/parameterlist/src -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/teuchos/core/src -I/home/shuang/trilinos-12.0.1-Source/packages/teuchos/core/src -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/kokkos/core/src -I/home/shuang/trilinos-12.0.1-Source/packages/kokkos/core/src -I/usr/include -I/home/shuang/trilinos-12.0.1-Source/packages/teuchos/comm/src -I/home/shuang/trilinos-12.0.1-Source/packages/teuchos/remainder/src -I/home/shuang/trilinos-12.0.1-Source/packages/teuchos/numerics/src -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/aztecoo/src -I/home/shuang/trilinos-12.0.1-Source/packages/aztecoo/src -I/home/shuang/trilinos-12.0.1-Source/packages/galeri/src-xpetra -I/home/shuang/trilinos-12.0.1-Source/MY_BUILD/packages/galeri/src-xpetra/../src -I/home/shuang/trilinos-12.0.1-Source/packages/galeri/src-xpetra/../src/Utils -I/home/shuang/trilinos-12.0.1-Source/packages/galeri/src-xpetra/../src/Headers …
Run Code Online (Sandbox Code Playgroud)

assembly gcc gnu gfortran trilinos

5
推荐指数
0
解决办法
408
查看次数

命令行参数驻留在哪里?

已知C语言中main函数的原型为int main(int argc, char **argv)。argv 数组指向的那些字符串驻留在哪里?它们位于哪个内存段?数据、栈还是堆?

谢谢。

c linux memory

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

为什么我们在C++ 11中使用initializer_list?

我读的initializer_list是针对单个类型的未知数量的参数的函数.但为什么我们需要呢?为什么我们不能使用普通容器,比如vectorlist

我尝试了以下代码,它的工作原理.

#include <iostream>
#include <list>
#include <string>
using namespace std;

void f(const list<string> &slst)
{
    for (auto s : slst)
        cout << s << endl;
}

int main()
{
    f({ "Good", "morning", "!" });
    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ stl initializer-list c++11

5
推荐指数
2
解决办法
1494
查看次数

C++中的方括号和pair类型

我从一本书上读了一段代码,但我不太了解语法,

const auto& [local_min, local_max] = minmax(A[i], A[i+1]);
Run Code Online (Sandbox Code Playgroud)

这里Avectorintlocal_minlocal_maxint

我知道minmax返回 a pair,但是方括号有什么作用,即 [local_min, local_max]?我想它不适用于这里的数组。

谢谢。

c++ templates stl generic-programming c++11

5
推荐指数
0
解决办法
4015
查看次数

如何使用MPI_File_open替换MPI中的现有文件

我正在阅读"使用MPI-2"并尝试自己执行代码.我为MPI_File_open指定了MPI_MODE_CREATE,但它实际上没有创建新文件,而是覆盖了具有相同名称的先前文件.我碰巧在第一次运行更多进程时找到了这个,然后用更少的进程运行.我的MPI版本是openmpi 1.8.1.

这是代码

#include <stdio.h>
#include <mpi.h>
#define BUFSIZE 4
int main(int argc, char **argv)
{
    int map[BUFSIZE], i, rank , size;
    char buf[BUFSIZE];
    MPI_File fh;
    MPI_Datatype filetype;
    MPI_Status status;
    MPI_Offset disp=0;

    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &size);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    for(i=0;i<BUFSIZE;i++)
    {
//      buf[i]=size*i+rank+'0';
        buf[i]=size*i+rank+'A';
        map[i]=size*i+rank;
    }
    MPI_File_open(MPI_COMM_WORLD, "datafile4", MPI_MODE_CREATE|MPI_MODE_WRONLY, MPI_INFO_NULL, &fh);
    MPI_Type_create_indexed_block(BUFSIZE, 1, map, MPI_CHAR, &filetype);
    MPI_Type_commit(&filetype);
    MPI_File_set_view(fh, disp, MPI_CHAR, filetype, "native", MPI_INFO_NULL);
    MPI_File_write_all(fh, buf, BUFSIZE, MPI_CHAR, &status);
    MPI_File_close(&fh);
    MPI_Type_free(&filetype);
    MPI_Finalize();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我运行6个进程时的文件内容

ABCDEFGHIJKLMNOPQRSTUVWX
Run Code Online (Sandbox Code Playgroud)

然后我修改了一下.替代

buf[i]=size*i+rank+'A';
Run Code Online (Sandbox Code Playgroud)

buf[i]=size*i+rank+'0';
Run Code Online (Sandbox Code Playgroud)

并运行2个进程,文件如下 …

filesystems file-io operating-system hpc mpi

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

如何获得中断向量?

当我运行"cat/proc/interrupts"时,我可以得到以下信息:

           CPU0       CPU1
  0:        253       1878   IO-APIC-edge      timer
  1:          3          0   IO-APIC-edge      i8042
  7:          1          0   IO-APIC-edge      parport0
  8:          0          1   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 12:          1          3   IO-APIC-edge      i8042
 16:     681584         60   IO-APIC-fasteoi   uhci_hcd:usb3, nvidia
 17:          0          0   IO-APIC-fasteoi   uhci_hcd:usb4, uhci_hcd:usb7
 18:          0          0   IO-APIC-fasteoi   uhci_hcd:usb8
 22:          2          1   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb5
 23:         17         17   IO-APIC-fasteoi   ehci_hcd:usb2, uhci_hcd:usb6
 44:     146232     472747   PCI-MSI-edge      ahci
 45:        118        115   PCI-MSI-edge      snd_hda_intel
 46:   10038650        842   PCI-MSI-edge      eth1
NMI:      44479      43798 …
Run Code Online (Sandbox Code Playgroud)

linux hardware x86 assembly linux-kernel

2
推荐指数
1
解决办法
3018
查看次数

为什么我需要传递一个比较器来构造一个priority_queue,当它是一个lambda时,而不是当它是std :: greater时?

我正在从cppreference中读取代码示例:

#include <functional>
#include <queue>
#include <vector>
#include <iostream>

template<typename T> void print_queue(T& q) {
    while(!q.empty()) {
        std::cout << q.top() << " ";
        q.pop();
    }
    std::cout << '\n';
}

int main() {
    std::priority_queue<int> q;

    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q.push(n);

    print_queue(q);

    std::priority_queue<int, std::vector<int>, std::greater<int> > q2;

    for(int n : {1,8,5,6,3,4,0,9,7,2})
        q2.push(n);

    print_queue(q2);

    // Using lambda to compare elements.
    auto cmp = [](int left, int right) { return (left ^ 1) < (right ^ 1);};
    std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);

    for(int …
Run Code Online (Sandbox Code Playgroud)

c++ stl priority-queue function-object c++11

2
推荐指数
2
解决办法
124
查看次数

在 C++ STL 中省略更大模板的类型参数

这是我在一本书上看到的一行代码

priority_queue<IteratorCurrentAndEnd, vector<IteratorCurrentAndEnd>, greater<>> min_heap;
Run Code Online (Sandbox Code Playgroud)

其中IteratorCurrentAndEnd是实现方法的类operator>。为什么我们可以用greater<>来代替greater<IteratorCurrentAndEnd>?我检查并读到了这样的东西,

template< class T = void >
struct greater;
Run Code Online (Sandbox Code Playgroud)

但我实在不知道这意味着什么。和类型有关系吗void?它到底是什么?

谢谢。

c++ stl generic-programming function-object c++11

2
推荐指数
1
解决办法
477
查看次数

无法从MSR回读

我正在编写一个内核模块,它是关于读写MSR的.我写了一个简单的测试程序,但它仍然失败.它所做的只是写入MSR,然后再读回来.这是代码:

static int __init test3_init(void)
{
    uint32_t hi,lo;
    hi=0; lo=0xb;
    asm volatile("mov %0,%%eax"::"r"(lo));
    asm volatile("mov %0,%%edx"::"r"(hi));
    asm volatile("mov $0x38d,%ecx");
    asm volatile("wrmsr");
    printk("exit_write: hi=%08x lo=%08x\n",hi,lo);
    asm volatile("mov $0x38d,%ecx");
    asm volatile("rdmsr":"=a"(lo),"=d"(hi));
    printk("exit_write2: hi=%08x lo=%08x\n",hi,lo);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

exit_write: hi=00000000 lo=0000000b

exit_write2: hi=00000000 lo=00000000

有人能告诉我为什么第二个输出中的返回值为0,而不是原始值?我的代码有问题吗?非常感谢.

c x86 assembly gcc inline-assembly

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