我正在阅读: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.
我试图通过机器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键.
提前致谢.
我正在阅读《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 库的情况下全局可见。
pthread 自旋锁是否有静态初始化程序?我看了一下pthread.h,好像没有。
我正在寻找类似于 PTHREAD_MUTEX_INITIALIZER 的东西。
我正在查看Boost 的 lockfree queue。
当生产者线程将数据结构 T 推入缓冲区时,它会(通过复制构造函数)将数据复制到缓冲区中。
当消费者线程尝试调用consume_one() 来读取缓冲区中的元素时,似乎需要一个内存屏障?如果没有,生产者线程所做的更改怎么可能对消费者线程可见?
谢谢!
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) 我已经阅读了 std::move() 的一些(伪)实现。所有这些都只是丢弃参数的引用,然后将其作为右值引用返回。
除此之外,它没有做任何其他事情。
不过,我很好奇:1.它的作用是否不止于此。2. 标准是否明确指出,以便调用者应该意识到副作用。
在《C++ 编程语言》第四版一书中,它指出“move(x) 将 x 标记为销毁,因此应谨慎使用 move(x)”。
这是否意味着标准存在副作用,因此编译器可以进行某些优化?
提前致谢。
我很好奇epoll_wait()如何接收已注册的套接字(带有epoll_ctl())已准备好进行读/写的事件.
我相信glibc神奇地处理它.
那么,是否有一个文档描述了如何为套接字触发以下事件?
PS最初我试图在我的盒子上将enum EPOLL_EVENTS粘贴到我的盒子里; stackoverflow认为我没有正确格式化代码块,虽然我用pre和then代码标签包装它,任何想法?
我遇到过这篇文章: 使用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)
我的问题是:
"struct explode:explode"声明爆炸继承自爆炸; 怎么样"struct explode <0,digits ...>:to_chars"?
'0'作为第一个模板参数的功能是什么?
谢谢!