小编Hei*_*Hei的帖子

g ++优化标志:-fuse-linker-plugin vs -fwhole-program

我正在阅读:http: //gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

它首先表明:与-flto结合使用此选项(-fwhole-program)不应该使用.相反,依赖链接器插件应该提供更安全和更精确的信息.

然后,它表明:如果程序不需要导出任何符号,则可以将-flto-fwhole-program结合使用,以允许过程间优化器使用更积极的假设,这可能会改善优化机会.当链接器插件处于活动状态时,不需要使用-fwhole-program(请参阅-fuse-linker-plugin).

这是否意味着在理论上,使用-fuse-linker-plugin-flto总是得到比使用-fwhole-program with -flto更好的可执行文件?

我尝试使用ld 分别与-fuse -linker-plugin-fwhole-program 链接,并且可执行文件的大小至少是不同的.

提前致谢.

PS我在CentOS 6上使用gcc 4.6.2和ld 2.21.53.0.1.

c++ linux g++ x86-64 ld

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

MySQL Workbench(版本6.0.8)SSH身份验证问题

我试图通过机器Y通过SSH连接到主机X上的MySQL服务器.

相同的设置(但旧版本的MySQL工作台)可以在我的另一个盒子(CentOS 6.3)上运行.

但是,相同的设置在我的CentOS 6.5上不起作用.

我尝试使用SSH密钥在我的盒子和机器Y之间通过SSH进行身份验证,当我从我的盒子ssh到机器Y时,它可以工作.

但是,MySQL工作台给了我以下错误:错误无法建立SSH连接:错误的身份验证类型(allowed_types = ['publickey','gssapi-with-mic']).

有人建议我在/ etc/ssh/sshd_config中将AllowTcpForwarding设置为yes,我做了,重新启动了服务并重启了我的机器.

但我仍然有同样的错误.

任何的想法?

似乎由于某种原因,当MySQL工作台连接时,没有拾取.ssh/id_dsa键.

提前致谢.

mysql ssh mysql-workbench centos6

17
推荐指数
3
解决办法
2万
查看次数

通过 pthread 库实现内存可见性?

我正在阅读《Programming With POSIX Threads》(作者 David Butenhof),他提到使用 pthread 库:

线程在解锁互斥体时(直接解锁或通过等待条件变量)可以看到的任何内存值,也可以被稍后锁定同一互斥体的任何线程看到。同样,在互斥体解锁之后写入的数据不一定能被锁定互斥体的线程看到,即使写入发生在锁定之前。

突然我想知道下面的代码是否有效:

线程A:

strcpy(buffer, "hello world");
pthread_spin_lock(&lock); // assuming the mutex in the statement above can be interchanged with spinlock. I don't see why it can't
pthread_spin_unlock(&lock);
Run Code Online (Sandbox Code Playgroud)

线程B:

pthread_spin_lock(&lock);
pthread_spin_unlock(&lock);
// read buffer; assuming thread B has a copy of the pointer somehow
Run Code Online (Sandbox Code Playgroud)

我的问题是:线程 B 可以在缓冲区中看到“hello world”吗?根据他的说法,应该是这样。我理解“通常”的方式是通过锁定来保护共享“资源”。但是我们假设 strcpy() 是随机发生的,并且在程序的生命周期中只能发生一次,并且假设线程 B 在线程 A 调用 pthread_spin_unlock() 之后以某种方式调用 pthread_spin_lock() :)

附带问题:是否有更快的方法使缓冲区的更改对其他线程可见?假设可移植性不是问题,而且我使用的是 CentOS。我能想到的一种替代方法是使用 mmap() 但不确定是否有任何更改在不使用 pthread 库的情况下全局可见。

c linux gcc pthreads

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

静态pthread自旋锁初始化存在吗?

pthread 自旋锁是否有静态初始化程序?我看了一下pthread.h,好像没有。

我正在寻找类似于 PTHREAD_MUTEX_INITIALIZER 的东西。

c linux gcc pthreads

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

使用 boost::lockfree::spsc_queue 时需要内存屏障吗?

我正在查看Boost 的 lockfree queue

当生产者线程将数据结构 T 推入缓冲区时,它会(通过复制构造函数)将数据复制到缓冲区中。

当消费者线程尝试调用consume_one() 来读取缓冲区中的元素时,似乎需要一个内存屏障?如果没有,生产者线程所做的更改怎么可能对消费者线程可见?

谢谢!

multithreading boost g++ lock-free c++11

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

如何查看我的gcc版本?

In file included from /usr/include/c++/4.8.2/locale:41:0,
                 from /usr/include/c++/4.8.2/iomanip:43,
                 from [...omitted by myself as it is irrelevant]
/usr/include/c++/4.8.2/bits/locale_facets_nonio.h:59:39: error: ‘locale’ has not been declared
     struct __timepunct_cache : public locale::facet
Run Code Online (Sandbox Code Playgroud)

以上是我的构建日志中的第一个错误.

我没有尝试自己编译glibc/gcc,我通过yum安装它们.

我找到的一个可疑的事情是:

$ ll /usr/include/c++/
total 4
drwxr-xr-x. 12 root root 4096 Dec 17 14:16 4.8.2
lrwxrwxrwx   1 root root    5 Dec 17 14:16 4.8.5 -> 4.8.2
$
Run Code Online (Sandbox Code Playgroud)

yum只显示了1个版本的gcc:

$ yum info gcc-c++
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: centos.uhost.hk
 * epel: mirrors.hustunique.com
 * extras: centos.uhost.hk …
Run Code Online (Sandbox Code Playgroud)

c++ gcc g++4.8 centos7

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

std::move() 只是强制转换?

我已经阅读了 std::move() 的一些(伪)实现。所有这些都只是丢弃参数的引用,然后将其作为右值引用返回。

除此之外,它没有做任何其他事情。

不过,我很好奇:1.它的作用是否不止于此。2. 标准是否明确指出,以便调用者应该意识到副作用。

在《C++ 编程语言》第四版一书中,它指出“move(x) 将 x 标记为销毁,因此应谨慎使用 move(x)”。

这是否意味着标准存在副作用,因此编译器可以进行某些优化?

提前致谢。

c++11

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

套接字事件如何传播/转换为epoll?

我很好奇epoll_wait()如何接收已注册的套接字(带有epoll_ctl())已准备好进行读/写的事件.

我相信glibc神奇地处理它.

那么,是否有一个文档描述了如何为套接字触发以下事件?

  1. EPOLLPRI
  2. EPOLLRDNORM
  3. EPOLLRDBAND
  4. EPOLLWRNORM
  5. EPOLLWRBAND
  6. EPOLLMSG
  7. EPOLLERR
  8. EPOLLHUP
  9. EPOLLRDHUP

PS最初我试图在我的盒子上将enum EPOLL_EVENTS粘贴到我的盒子里; stackoverflow认为我没有正确格式化代码块,虽然我用pre和then代码标签包装它,任何想法?

c linux glibc linux-kernel centos6

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

如何解释Variadic模板中的继承?

我遇到过这篇文章: 使用constexpr将数字转换为字符串文字

答案非常有趣:

namespace detail
{
    template<unsigned... digits>
    struct to_chars { static const char value[]; };

    template<unsigned... digits>
    const char to_chars<digits...>::value[] = {('0' + digits)..., 0};

    template<unsigned rem, unsigned... digits>
    struct explode : explode<rem / 10, rem % 10, digits...> {};

    template<unsigned... digits>
    struct explode<0, digits...> : to_chars<digits...> {};
}

template<unsigned num>
struct num_to_string : detail::explode<num> {};
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. "struct explode:explode"声明爆炸继承自爆炸; 怎么样"struct explode <0,digits ...>:to_chars"?

  2. '0'作为第一个模板参数的功能是什么?

谢谢!

c++ c++11

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