小编bao*_*iao的帖子

如何正确返回对类成员的引用?

class Foo {
    protected:
    QPoint& bar() const;

    private:
    QPoint m_bar;
};

QPoint& Foo::bar() const {
    return m_bar;
}
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

错误:从'const QPoint'类型的表达式初始化'QPoint&'类型的引用无效

但是,如果我将其更改为:

QPoint& Foo::bar() const {
    return (QPoint&) m_bar;
}
Run Code Online (Sandbox Code Playgroud)

1)我不明白为什么编译器说我的QPoint是const.

2)将演员留在那里可以吗?

c++

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

如果有多个领导者,Raft算法如何保证共识?

正如论文所说:

选举安全:在一个特定的任期内,最多只能选出一名领导人.§5.2

但是,系统中可能有多个领导者.筏只能承诺在给定的期限内只有一个领导者.所以如果我有多个客户端,我不会得到不同的数据吗?这如何让Raft成为一致的算法?

有什么我不明白的,有人可以解释一下吗?

algorithm distributed consensus raft

8
推荐指数
3
解决办法
1632
查看次数

为什么linux有足够的内存但使用交换

我有一台服务器运行一个erlang应用程序,像riak ..

在问题出现之前,这样的内存使用情况

记忆之前

但经过很长一段时间,缓存很清楚,系统开始使用swap. 记忆以后

现在我有两个问题..

  1. 为什么系统会释放缓存?这导致系统的IO高于以前的问题

  2. 为什么系统仍然有足够的内存,但仍然使用交换..

以下是最重要的信息: 最佳

更新:这个问题又来了..
在此输入图像描述 由于我已经运行命令, sudo swapoff -a 因此系统不使用交换,系统运行良好.
现在问题是为什么系统发布页面缓存..?
那么系统将释放pgae缓存的情况是什么?

更新:我已经修复了这个问题..
我从"理解Linux内核"
这本书中得到了答案书中说如果有足够的可用内存,页面将无限期地保存在缓存中,然后可以被其他进程重用没有访问磁盘.

我认为这意味着如果页面缓存长时间停留在系统中,系统将释放缓存.

读完linux源代码后,我会更新它.为什么系统会释放缓存的页面,即使它有足够的内存?

谢谢

更新

  1. linux之所以将内存交换到交换区域,即使系统有足够的内存?

如果我们在进程发现内存不足时交换内存,那么进程需要很长时间才能获得足够的内存.它需要调用页面框架回收.

  1. 我们设置vm.swappiness = 0的原因,仍然会有交换.

后端有一个global_reclaim.哪个不检查swappiness值

linux memory erlang

7
推荐指数
1
解决办法
2416
查看次数

linux页面缓存刷新顺序

在将数据写入磁盘之前有页面缓存.

如果我有两个操作.

write(fileA)
write(fileB)
Run Code Online (Sandbox Code Playgroud)

然后,如果系统突然关闭.我们不主动调用sync()调用.

我想知道我们写入fileB的数据是否有可能刷新到磁盘,而我们写入fileA的数据是否还没有刷新到磁盘?

linux-kernel page-caching

5
推荐指数
2
解决办法
1347
查看次数

为什么 leveldb 中的 table 和 tablebuilder 使用 struct rep?

最近在看leveldb的源码,但是对table中的rep struct和table_builder源码很迷惑。

因为我们可以直接将成员变量直接存储在类Table和类TableBuilder中。

但是作者为什么要做一个struct Rep,并将成员变量存放在struct Rep中呢?

我可以想出一个原因,因为 table 和 table_builder 会暴露给用户,所以我们想隐藏实现。这样对吗?或者还有其他一些我想念的想法,或者是某种设计模式?

谢谢

c++ design-patterns leveldb

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

套接字中有多个不同的protobuf消息

我在我的C ++服务器上使用protobuf。但是我在套接字中定义了许多原型消息时遇到了多个不同的protobuf消息的问题,例如

message SdkHGetRet {
  required int32 opcode = 1;
  required bytes value = 2;
}

message SdkHPut {
  required bytes table = 1;
  required bytes hname = 2;
  required bytes key = 3;
  required bytes value = 4;
  optional int32 writesrc = 5 [default = 0];
}

message SdkSet {
  required bytes table = 1;
  required bytes key = 2;
  required bytes value = 3;
  optional int32 writesrc = 4 [default = 0];
}

message SdkSetRet {
  required bool …
Run Code Online (Sandbox Code Playgroud)

sockets protocol-buffers

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