小编Mat*_*att的帖子

构造函数初始化列表评估顺序

我有一个带有一些参数的构造函数.我假设它们是按照列出的顺序构建的,但在一种情况下,它们似乎是反向构造的,导致中止.当我颠倒论点时,程序停止了中止.这是我正在使用的语法的一个例子.问题是,在这种情况下,需要在b_之前初始化a_.你能保证施工顺序吗?

例如

class A
{
  public:
    A(OtherClass o, string x, int y) :
      a_(o), b_(a_, x, y) { }

    OtherClass a_;
    AnotherClass b_;
};
Run Code Online (Sandbox Code Playgroud)

c++ gcc c++-faq

243
推荐指数
3
解决办法
6万
查看次数

如何以及何时对齐缓存行大小?

在Dmitry Vyukov用C++编写的优秀的有界mpmc队列中见:http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue

他添加了一些填充变量.我认为这是为了使其与高速缓存行对齐以提高性能.

我有一些问题.

  1. 为什么这样做?
  2. 这是一种永远有效的便携式方法吗?
  3. 在什么情况下最好使用__attribute__ ((aligned (64))).
  4. 为什么在缓冲区指针之前填充有助于提高性能?不只是指针加载到缓存中,所以它实际上只是一个指针的大小?

    static size_t const     cacheline_size = 64;
    typedef char            cacheline_pad_t [cacheline_size];
    
    cacheline_pad_t         pad0_;
    cell_t* const           buffer_;
    size_t const            buffer_mask_;
    cacheline_pad_t         pad1_;
    std::atomic<size_t>     enqueue_pos_;
    cacheline_pad_t         pad2_;
    std::atomic<size_t>     dequeue_pos_;
    cacheline_pad_t         pad3_;
    
    Run Code Online (Sandbox Code Playgroud)

这个概念在gcc下是否适用于c代码?

c c++ caching

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

在C/C++中处理内存不足情况的优雅方法是什么?

我正在编写一个消耗大量内存的缓存应用程序.

希望我能够很好地管理自己的记忆,但是我只是在考虑如果我的内存不足会怎么做.

如果调用甚至分配一个简单的对象失败,即使是syslog调用也可能会失败?

编辑:好的,也许我应该澄清这个问题.如果malloc或new返回NULL或0L值,那么它实质上意味着调用失败,并且由于某种原因它无法为您提供内存.那么,在这种情况下做什么是明智的做法?

EDIT2:我刚刚意识到对"new"的调用会引发异常.这可以在更高的水平上捕获,所以我可以优雅地进一步退出.此时,甚至可以根据释放的内存量进行恢复.至少我应该在那一点上希望能够记录一些东西.因此,虽然我已经看到在新的之后检查指针值的代码,但这是不必要的.在C中,您应该检查malloc的返回值.

c c++ linux

45
推荐指数
4
解决办法
8356
查看次数

如何以编程方式获取Linux中目录的可用磁盘空间

是否有一个函数可以返回给定目录路径的驱动器分区上有多少可用空间?

c++ linux

45
推荐指数
3
解决办法
5万
查看次数

如何向wireshark添加自定义协议分析器?

我有一个自定义协议,我正在wireshark中查看.我认为如果wireshark可以为我解读它,那么我将不需要解码十六进制.虽然我在我的程序日志中这样做,但wireshark使用时间信息捕获整个会话,因此它在那里更有用.

这可以轻松完成吗?

wireshark wireshark-dissector

37
推荐指数
3
解决办法
4万
查看次数

CLOCK_MONOTONIC和CLOCK_MONOTONIC_RAW有什么区别?

根据Ubuntu下的Linux手册页

CLOCK_MONOTONIC
      Clock that cannot be set and  represents  monotonic  time  since
      some unspecified starting point.

CLOCK_MONOTONIC_RAW (since Linux 2.6.28; Linux-specific)
      Similar  to  CLOCK_MONOTONIC, but provides access to a raw hard?
      ware-based time that is not subject to NTP adjustments.
Run Code Online (Sandbox Code Playgroud)

根据韦伯斯特在线词典Monotonic的意思是:

2:随着独立变量的值或术语的下标的增加,具有永不增加或永不减少的属性.

换句话说,它不会向后跳.我可以看到,如果你计算一些代码,这将是一个重要的属性.

但是,正常版本和原始版本之间的差异尚不清楚.有人可以了解一下NTP如何影响CLOCK_MONOTONIC?

linux ubuntu timing

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

在Linux中存储和访问多达1000万个文件

我正在编写一个需要存储大约1000万个文件的应用程序.

它们目前以UUID命名,每个大约4MB,但总是相同.从/向这些文件读取和写入将始终是顺序的.

我正在寻找2个主要问题的答案:

1)哪种文件系统最适合这种情况.XFS还是ext4?2)是否有必要将文件存储在子目录下以减少单个目录中的文件数量?

对于问题2,我注意到人们已经尝试发现可以存储在单个目录中的文件数量的XFS限制,并且没有找到超过数百万的限制.他们注意到没有性能问题.在ext4下怎么样?

在人们做类似事情时,有些人建议将inode编号存储为文件的链接而不是文件的性能(这是在数据库索引中.我也在使用).但是,我没有看到用于按inode编号打开文件的可用API.这似乎更像是在ext3下提高性能的建议,我不打算顺便使用它.

ext4和XFS限制是什么?从一个到另一个有什么性能优势,你能看到在我的情况下使用ext4而不是XFS的理由吗?

linux performance ext4 xfs

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

我可以将docker主机目录作为copy/overlay上的副本挂载吗?

我想在docker中挂载一个主机目录,在外面实际上是只读/只.但我希望它以读/写的形式出现在容器内.

这样我可以写入文件/目录,但不能在外部进行更改.这可能是使用某种覆盖过程吗?

docker

28
推荐指数
4
解决办法
7198
查看次数

++ iterator和iterator ++之间的性能差异?

我的同事声称对于对象类型,preincrement比post增量更有效

例如

std::vector<std::string> vec;

... insert a whole bunch of strings into vec ...

// iterate over and do stuff with vec.  Is this more efficient than the next 
// loop?
std::vector<std::string>::iterator it;
for (it = vec.begin(); it != vec.end(); ++it){

}

// iterate over and do stuff with vec.  Is this less efficient than the previous loop?
std::vector<std::string>::iterator it;
for (it = vec.begin(); it != vec.end(); it++){

}
Run Code Online (Sandbox Code Playgroud)

c++ performance

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

正确地将statvfs转换为百分比

我有一个非常简单的测试程序,打印出以下数字.

int main(int argc, char* argv[])
  struct statvfs vfs;
  statvfs(argv[1], &vfs);
  printf("f_bsize (block size): %lu\n"
       "f_frsize (fragment size): %lu\n"
       "f_blocks (size of fs in f_frsize units): %lu\n"
       "f_bfree (free blocks): %lu\n"
       "f_bavail free blocks for unprivileged users): %lu\n"
       "f_files (inodes): %lu\n"
       "f_ffree (free inodes): %lu\n"
       "f_favail (free inodes for unprivileged users): %lu\n"
       "f_fsid (file system ID): %lu\n"
       "f_flag (mount flags): %lu\n"
       "f_namemax (maximum filename length)%lu\n",
       vfs.f_bsize,
       vfs.f_frsize,
       vfs.f_blocks,
       vfs.f_bfree,
       vfs.f_bavail,
       vfs.f_files,
       vfs.f_ffree,
       vfs.f_favail,
       vfs.f_fsid,
       vfs.f_flag,
       vfs.f_namemax);

       return 0;
    } …
Run Code Online (Sandbox Code Playgroud)

c c++ linux filesystems

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