我在Cell处理器上调整DMA传输的内存时遇到问题.我需要地址的最后4位为0.
我有4个数组,unsigned int其中每个元素必须在内存中对齐,以便其(十六进制)地址以零结尾.
例如
int main()
{
size_t i;
static unsigned int a[2] __attribute__ ((aligned (16)));
static unsigned int b[2] __attribute__ ((aligned (16)));
static unsigned int c[2] __attribute__ ((aligned (16)));
static unsigned int d[2] __attribute__ ((aligned (16)));
for (i = 0; i < 2; ++i) {
printf("a[%u] = %p\n", &a[i]);
printf("b[%u] = %p\n", &b[i]);
printf("c[%u] = %p\n", &c[i]);
printf("d[%u] = %p\n", &d[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
a[0] = 0x10010b60
b[0] = 0x10010b50
c[0] = 0x10010b40 …Run Code Online (Sandbox Code Playgroud) 我想在主线程上初始化一些静态数据.
int32_t GetFoo(ptime t)
{
static HugeBarData data;
return data.Baz(t);
}
int main()
{
GetFoo(); // Avoid data race on static field.
// But will it be optimized away as unnecessary?
// Spawn threads. Call 'GetFoo' on the threads.
}
Run Code Online (Sandbox Code Playgroud)
如果编制者可能决定删除它,我怎么能强迫它留在那里?
在C++ 11 中使用value([=])或reference([&])使用lambda默认捕获有什么缺陷?
我知道一些陷阱,如:
按值划分的默认值是否有任何缺点?
可以使用迭代器范围构造一个向量,如下所示:
std::vector<std::string> vec(std::istream_iterator<std::string>{std::cin},
std::istream_iterator<std::string>{});
Run Code Online (Sandbox Code Playgroud)
但我也可以使用C++ 11统一初始化语法编译和运行代码(注意括号),如下所示:
std::vector<std::string> vec{std::istream_iterator<std::string>{std::cin},
std::istream_iterator<std::string>{}};
Run Code Online (Sandbox Code Playgroud)
这里到底发生了什么?
我知道采用初始化列表的构造函数优先于其他形式的构造.编译器是否应该解析为构造函数采用包含2个元素的初始化列表std::istream_iterator?这应该是一个错误,因为std::istream_iterator无法转换为矢量值类型std::string,对吧?
我试图理解C++ 11 rvalue引用以及如何在我的代码中使用它们以获得最佳性能.
假设我们有一个类A,它有一个指向大量动态分配数据的成员指针.
此外,一种foo(const A& a)与类对象做某事的方法A.
我希望防止在将A对象A传递给函数时调用复制构造函数foo,因为在这种情况下它将执行底层堆数据的深层复制.
我测试了传递左值参考:
A a;
foo(a);
Run Code Online (Sandbox Code Playgroud)
并传递右值引用:
foo(A());
Run Code Online (Sandbox Code Playgroud)
在这两种情况下都没有调用复制构造函数.
这是预期的还是由于我的编译器(Apple LLVM 5.1)的一些优化?这有什么说明吗?
仅使用std::chrono库,我有一个 type 变量unsigned long,表示从 1970 年 1 月 1 日到现在的毫秒数,我想向它添加 100 毫秒。
unsigned long now = std::chrono::system_clock::now().time_since_epoch().count();
unsigned long t100ms = std::chrono::milliseconds(100).count();
unsigned long time = now + t100ms;
Run Code Online (Sandbox Code Playgroud)
打印时t100ms,我得到“ 1000”。
如果我打印std::chrono::system_clock::nowevery second的值,我会看到每次迭代时递增的数字不会增加 1000(因为 1 秒等于 1000 毫秒,应该是这种情况)。
难道std::chrono::system_clock::now().time_since_epoch()不返回自1970年1月1日以毫秒为单位来表示已经经过的时间量?
以下行是如何展开的?
template <class... Ts>
void print_all(std::ostream& os, Ts const&... args) {
(void(os << args), ...);
}
Run Code Online (Sandbox Code Playgroud)
应用规则,
一元右折(E op ...)变为E 1 op(... op(E N-1 op E N))
由cppreference提供,
E = void(os << args)
op = ,
Run Code Online (Sandbox Code Playgroud)
然后扩张成为
void(os << args[0], ..., (args[N-3], (args[N-2], args[N-1])) )
Run Code Online (Sandbox Code Playgroud)
?
怎么样
v.push_back(args), ...
Run Code Online (Sandbox Code Playgroud)
它变成了吗?
v.push_back(args[0], (args[1], ..., (args[N-2], args[N-1])))
Run Code Online (Sandbox Code Playgroud)
扩展和括号都令人困惑.有人解释一下吗?
我有以下代码将我的std::cout输出重定向到日志文件.
std::ofstream out("out.txt");
std::streambuf *coutbuf = std::cout.rdbuf(); //save old buf
std::cout.rdbuf(out.rdbuf()); //redirect std::cout to out.txt!
Run Code Online (Sandbox Code Playgroud)
现在我想要的是,每当发生换行时,当前时间戳将被写入文件.
我知道我可以用以下方法实现:
std::cout << getTime() << "printing data" << std::endl;
Run Code Online (Sandbox Code Playgroud)
但我想要的是以std::cout某种方式自动处理它.那可能吗?
什么是C++ 11个函数之间的差异get_id()和native_handle()?
在我创建的测试程序中,它们int为线程返回相同的值,所以我不知道它的区别是什么.
我在Windows上使用GCC 4.8.1.
我的 docker 容器需要设置 JAVA_HOME。我已将其添加到 Dockerfile 中,如下所示
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre
Run Code Online (Sandbox Code Playgroud)
但是,这是值的硬编码。有没有办法可以从图像本身动态获取这个值