小编gct*_*gct的帖子

AF_UNIX套接字开销?

我看到一些奇怪的东西,一对AF_UNIX套接字由一个调用创建,如:

 socketpair(AF_UNIX, SOCK_STREAM, 0, sfd); 
Run Code Online (Sandbox Code Playgroud)

其中sfd是文件描述符的int [2]数组.

首先,默认缓冲区大小似乎正好是122K(124928字节),而不是/ proc/sys/net中的任何内容(例如设置为128K的wmem_default).有谁知道这个奇怪的缓冲区大小的原因?

第二,通过套接字写入小消息时(8字节).我只能在写块之前写入423个,这只是8*423 = 3384个字节,另一个是奇数.这些消息就好像它们每个占用了295 +一个小字节.这个开销的来源是什么?

在RHEL6上运行(2.6.32,64位)

我写了一个程序来尝试不同大小的数据来比较开销成本:

#include <errno.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define DATA_SIZE 4

void run(size_t size) {
    int sfd[2];
    if (socketpair(AF_UNIX, SOCK_STREAM, 0, sfd) == -1) {
        perror("error");
    }


    int sndbuf, sbsize = sizeof(sndbuf);
    getsockopt(sfd[0], SOL_SOCKET, SO_SNDBUF, &sndbuf, (socklen_t*)&sbsize);

    printf("Data Size: %zd\n", size);
    char buff[size];   
    size_t wrote=0;
    for (size_t ii=0; ii < 32768; ii++) {
        if ((send(sfd[0], buff, size, …
Run Code Online (Sandbox Code Playgroud)

c sockets linux networking

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

boost :: function参数的默认值?

我有一个函数,我想将一个可选的boost :: function参数作为报告错误条件的回调.是否有一些特殊值我可以使用默认值使其可选?

例如,使用常规函数指针,我可以这样做:

void my_func(int a, int b, t_func_ptr err_callback=NULL) {

   if (error && (err_callback != NULL))
      err_callback();

}
Run Code Online (Sandbox Code Playgroud)

我可以用boost :: function替换函数指针做类似的事吗?

boost arguments default function boost-function

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

浮动到双重转换:为什么这么多说明?

我很好奇是否有人可以为我阐明这一点.我正在研究一些数字数据转换的东西,我有几个执行数据转换的函数,我用两个宏定义:

#define CONV_VIA_CAST(name, dtype, vtype)                               \
    static inline void name(void *data, void *view, size_t len) {       \
        vtype *vptr = (vtype*)view;                                     \
        dtype *dptr = (dtype*)data;                                     \
        for (size_t ii=0; ii < len/sizeof(vtype); ii++) {               \
            *vptr++ = (vtype)*dptr++;                                   \
        }                                                               \
    } 


#define CONV_VIA_FUNC(name, dtype, vtype, via)                          \
    static inline void name(void *data, void *view, size_t len) {       \
        vtype *vptr = (vtype*)view;                                     \
        dtype *dptr = (dtype*)data;                                     \
        for (size_t ii=0; ii < len/sizeof(vtype); ii++) {               \
            *vptr++ …
Run Code Online (Sandbox Code Playgroud)

c assembly compiler-optimization

19
推荐指数
2
解决办法
911
查看次数

linux是否允许从信号处理程序进行任何系统调用?

我的理解是,一般来说,如果从信号处理程序调用非异步信号安全函数,行为是不确定的,但我听说linux允许你安全地调用任何系统调用.这是真的?此外,SIGSEGV处理程序的唯一可移植行为是中止或退出,但我知道如果你返回,linux实际上会恢复执行,是吗?

c linux signals

18
推荐指数
3
解决办法
8060
查看次数

如何在Qt中解码"application/x-qabstractitemmodeldatalist"进行拖放?

我已经创建了一个QTreeWidget的子类,我希望能够从另一个树小部件中拖动项目(我想要自己处理插件),以及从QListWidget.

我已经覆盖了我的类中的dropEvent方法,看起来我从QTreeWidget获取的数据的mimetype是application/x-qabstractitemmodeldatalist,我如何解码这个以从树中取出项目?

qt qt4

15
推荐指数
2
解决办法
6168
查看次数

在机器之间复制git本地分支?

好的,所以我在两台机器上跟踪远程仓库,因此两者都有主分支.我还在笔记本电脑上创建了一个名为development的本地分支.有没有办法让我将本地分支复制到我的台式计算机上?我会使用我的笔记本电脑,但出于某种原因我遇到了gdb和emacs的麻烦......

编辑:这对我有用

git remote add laptop [username]@hostname:/path/to/repo
git fetch laptop
git checkout --track -b development laptop/development
git pull
Run Code Online (Sandbox Code Playgroud)

git

14
推荐指数
1
解决办法
8426
查看次数

Do-s和DO-for浮点运算?

对于浮点运算(IEEE754,如果存在混淆)有什么好的做法和不做什么,以确保良好的数值稳定性和结果的高精度?

我知道有些人不喜欢减去相似数量的数量,但我很好奇其他有什么好的规则.

c floating-point ieee-754

13
推荐指数
4
解决办法
1491
查看次数

有没有好的第三方库在openCL之上构建?

我正在考虑处理原语,例如FFT,卷积,相关,矩阵数学,任何类型的机器视觉原语.我无法在这些方面找到任何东西,有没有人知道任何出现过的好项目?

c++ primitive opencl

12
推荐指数
2
解决办法
1202
查看次数

我的错误,还是intel编译器的错误?sizeof非静态成员错误

我相信这段代码:

#include <stdio.h>

struct foo {
    char array[1024];
};

int main() { 
    fprintf(stderr, "sizeof(foo::array): %zd\n", sizeof(foo::array));    
}
Run Code Online (Sandbox Code Playgroud)

是有效的C++.g ++用-ansi -pedantic编译得很好.但是,使用英特尔的icc 12.1.3进行编译,我得到:

error #288: a nonstatic member reference must be relative to a specific object
Run Code Online (Sandbox Code Playgroud)

这是我的错误还是icc做了错误的事情:C++规范?

c++ sizeof c++11

12
推荐指数
1
解决办法
254
查看次数

使用boost序列化将C++中的对象序列化为二进制格式以便在套接字上使用是否安全?

我知道你可以使用boost序列化来序列化为文本格式,然后推送套接字,但我想将一类统计数据序列化为二进制格式(包括大小和编码/解码开销).为此使用boost序列化是否安全?

我特别担心的是:

  1. 不同平台上的整数类型大小之间的差异(主要是32位与64位).
    虽然我可以通过使用来自stdint的精确大小的整数来解决这个问题,但我仍然希望了解这种行为.
  2. 系统之间的字节序差异确实会提升序列化为标准字节序(例如:网络排序),然后使用主机的字节顺序进行反序列化?

这是一个非常好的库,但遗憾的是它的二进制功能的文档有些限制,所以我只想确保以这种方式使用它是安全的.

c++ networking serialization boost tcp

7
推荐指数
2
解决办法
3702
查看次数