#include <cstdio>
#include <cstdlib>
struct Interface {
virtual void f() = 0;
};
struct Impl1: Interface {
void f() override {
std::puts("foo");
}
};
// or __attribute__ ((visibility ("hidden")))/anonymous namespace
static Interface* const ptr = new Impl1 ;
int main() {
ptr->f();
}
Run Code Online (Sandbox Code Playgroud)
使用g ++ - 7编译时-O3 -flto -fdevirtualize-at-ltrans -fipa-pta -fuse-linker-plugin,上述ptr->f()调用不能被虚拟化.
似乎没有外部库可以修改ptr.这是GCC优化器的缺陷,还是因为其他一些来源使得虚拟化在这种情况下不可用?
更新:似乎clang-7 with -flto -O3 -fwhole-program-vtables -fvisibility=hidden是唯一可以虚拟化此程序的编译器+标志(如2018/03).
#include <iostream>
#include <sstream>
#include <thread>
using namespace std;
int main()
{
auto runner = []() {
ostringstream oss;
for (int i=0; i<100000; ++i)
oss << i;
};
thread t1(runner), t2(runner);
t1.join(); t2.join();
}
Run Code Online (Sandbox Code Playgroud)
在g ++ 6.2.1中编译上面的代码,然后运行它valgrind --tool=helgrind ./a.out.赫尔格林德会抱怨:
==5541== ----------------------------------------------------------------
==5541==
==5541== Possible data race during read of size 1 at 0x51C30B9 by thread #3
==5541== Locks held: none
==5541== at 0x4F500CB: widen (locale_facets.h:875)
==5541== by 0x4F500CB: widen (basic_ios.h:450)
==5541== by 0x4F500CB: fill (basic_ios.h:374)
==5541== by 0x4F500CB: …Run Code Online (Sandbox Code Playgroud)
map<key_type, value_type> map_field = N;...其中key_type可以是任何整数或字符串类型(因此,除了浮点类型和字节之外的任何标量类型).value_type可以是任何类型.
我想定义一个map<string, repeated string>字段,但它对我来说似乎是非法的libprotoc 3.0.0,它抱怨Expected ">".所以我想知道是否有任何方法可以将重复的字符串放入地图中.
可能的解决方法可能是:
message ListOfString {
repeated string value = 1;
}
// Then define:
map<string, ListOfString> mapToRepeatedString = 1;
Run Code Online (Sandbox Code Playgroud)
但这ListOfString看起来多余.
我有一个函数f返回一个Promise.返回的Promise任一resolve({name: String, data: Object})或reject(Error).
我在VSCode中尝试了以下语法(如JSDoc中的一个问题所述),但它不起作用:
/**
* @promise fPromise
* @reject {Error}
* @fulfill {Object} project
* @fulfill {Object} project.data
* @fulfill {String} project.name
* @returns fPromise
*/
Run Code Online (Sandbox Code Playgroud) 我有一个静态库libfoo.a,它只是多个.o文件的压缩。我正在寻找一种列出所有符号的方法
这样我就可以找出这个库的所有外部符号依赖项。
我正在研究Seqlock的实现。但是我发现的所有资料来源都以不同的方式实现它们。
static inline unsigned __read_seqcount_begin(const seqcount_t *s)
{
unsigned ret;
repeat:
ret = READ_ONCE(s->sequence);
if (unlikely(ret & 1)) {
cpu_relax();
goto repeat;
}
return ret;
}
static inline unsigned raw_read_seqcount_begin(const seqcount_t *s)
{
unsigned ret = __read_seqcount_begin(s);
smp_rmb();
return ret;
}
Run Code Online (Sandbox Code Playgroud)
基本上,它使用易失性读取以及在读取器端具有获取语义的读取屏障。
使用时,后续读取不受保护:
struct Data {
u64 a, b;
};
// ...
read_seqcount_begin(&seq);
int v1 = d.a, v2 = d.b;
// ...
Run Code Online (Sandbox Code Playgroud)
RIGTORP_SEQLOCK_NOINLINE T load() const noexcept {
T copy;
std::size_t seq0, …Run Code Online (Sandbox Code Playgroud) 这是我的目录层次结构:
/
|-- main.go // package main, an HTTP server which accepts request and calls C/U APIs in pkg1 to finish certain task
|-- main_test.go // wants to call veryfyTaskNumber in pkg1_test
|-- pkg1 // package pkg1, CRUD APIs with Retrieve&Delete unexported for safety
|-- pkg1_test.go // contains a function verifyTaskNumber(*testing.T, taskName string, expectedNo int) which calls internal Retrieve function in pkg1
Run Code Online (Sandbox Code Playgroud)
我仅在中有一些用于测试的实用程序功能pkg1_test.go。main.go进口pkg1。现在,我想在我的中使用这些功能main_test.go。搜索之后,我找到了两种可能的解决方案,但是它们都有一些缺点:
pkg1.go。但是,这些函数可能包含在生成的二进制文件中go build。testutility程序包中,然后 …我们目前使用 Github 页面作为简单的 API 模拟服务器。我们将所有模拟文件放在 和 下docs/,只是GET username.github.io/project/api/someAPI为了检索数据。但是,默认情况下,Github Pages 返回的 Content-Type 不是application/octet-stream没有application/json扩展名的文件,因此我们的前端代码在解析结果时会抛出错误。
我想知道有什么方法可以更改 Github Page 上没有扩展名的文件返回的 Content-Type 吗?
在a.hpp我定义:
#include <utility>
namespace Board {
template<int W, int H>
struct GroupNode
{
using PointType = std::pair<int, int>;
// ...
};
}
Run Code Online (Sandbox Code Playgroud)
然后,在b.cpp我定义:
#include "a.hpp"
namespace Board {
template<int W, int H>
struct NodeList
{
using StdList = std::list < /* typename */ GroupNode<W, H>>;
}
}
// and then use NodeList<19, 19> nl;
Run Code Online (Sandbox Code Playgroud)
上面的代码可以在gcc-6和clang-3.9上编译而不会发出任何警告.然而,克利翁2016.3抱怨cannot resolve variable GroupNode在b.cpp.取消注释typename可以驯服Clion警告,但我想知道这是否typename是必需的?如果是这样,为什么g ++/clang ++没有发出任何警告?
Intel 提供了一个名为_mm256_undefined_si256 的内在函数,它返回带有未定义元素的 __m256i 类型的向量。
在Clang 的实现中,这总是返回 UndefValue,并且通常会导致所有依赖于其值的代码路径被优化掉。
我的问题是:这个内在函数有哪些可能的用途?
c++ ×3
c ×2
architecture ×1
atomic ×1
avx ×1
avx2 ×1
binaryfiles ×1
content-type ×1
elf ×1
gcc ×1
github-pages ×1
go ×1
intrinsics ×1
jsdoc ×1
object-files ×1
ostream ×1
rust ×1
simd ×1
templates ×1
unit-testing ×1