我正在尝试将软件安装到特定目录.我找到了几种方法,但不确定它们之间有什么区别.
./configure --prefix=***make install DESTDIR=***make install prefix=***./configure --prefix=***我对这四个的功能感到困惑.他们实现了同样的目标吗?
我的困惑来自"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++入门并看到这两个似乎具有相同功能的函数.谁能帮忙告诉我两者有什么区别?谢谢.
我阅读了英特尔手册,发现指令有一个锁定前缀,可以防止处理器同时写入同一个内存位置.我很兴奋.我想它可以用作硬件互斥.所以我写了一段代码来拍摄.结果非常令人沮丧.锁不支持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",但是处理器抱怨"无效指令".:-(我想将序列化写操作的唯一方法是使用软件互斥,对吧?
我正在从源代码编译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) 已知C语言中main函数的原型为int main(int argc, char **argv)。argv 数组指向的那些字符串驻留在哪里?它们位于哪个内存段?数据、栈还是堆?
谢谢。
我读的initializer_list是针对单个类型的未知数量的参数的函数.但为什么我们需要呢?为什么我们不能使用普通容器,比如vector或list?
我尝试了以下代码,它的工作原理.
#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) 我从一本书上读了一段代码,但我不太了解语法,
const auto& [local_min, local_max] = minmax(A[i], A[i+1]);
Run Code Online (Sandbox Code Playgroud)
这里A是vector中int和local_min和local_max的int。
我知道minmax返回 a pair,但是方括号有什么作用,即 [local_min, local_max]?我想它不适用于这里的数组。
谢谢。
我正在阅读"使用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个进程,文件如下 …
当我运行"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) 我正在从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) 这是我在一本书上看到的一行代码
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?它到底是什么?
谢谢。
我正在编写一个内核模块,它是关于读写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,而不是原始值?我的代码有问题吗?非常感谢.