相关疑难解决方法(0)

什么是vdso和vsyscall?

我做到了 sudo cat /proc/1/maps -vv

我试图弄清楚输出.我可以看到很多共享库按预期映射到内存映射段.

7f3c00137000-7f3c00179000 r-xp 00000000 08:01 21233923                   /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8
7f3c00179000-7f3c00379000 ---p 00042000 08:01 21233923                   /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8
7f3c00379000-7f3c0037a000 r--p 00042000 08:01 21233923                   /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8
7f3c0037a000-7f3c0037b000 rw-p 00043000 08:01 21233923                   /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8
7f3c0037b000-7f3c00383000 r-xp 00000000 08:01 21237216                   /lib/x86_64-linux-gnu/libnih-dbus.so.1.0.0
7f3c00383000-7f3c00583000 ---p 00008000 08:01 21237216                   /lib/x86_64-linux-gnu/libnih-dbus.so.1.0.0
7f3c00583000-7f3c00584000 r--p 00008000 08:01 21237216                   /lib/x86_64-linux-gnu/libnih-dbus.so.1.0.0
7f3c00584000-7f3c00585000 rw-p 00009000 08:01 21237216                   /lib/x86_64-linux-gnu/libnih-dbus.so.1.0.0
7f3c00585000-7f3c0059b000 r-xp 00000000 08:01 21237220                   /lib/x86_64-linux-gnu/libnih.so.1.0.0
7f3c0059b000-7f3c0079b000 ---p 00016000 08:01 21237220                   /lib/x86_64-linux-gnu/libnih.so.1.0.0
7f3c0079b000-7f3c0079c000 r--p 00016000 08:01 21237220                   /lib/x86_64-linux-gnu/libnih.so.1.0.0
Run Code Online (Sandbox Code Playgroud)

接近尾声有类似的东西

7f3c0165b000-7f3c0177e000 rw-p 00000000 00:00 0                          [heap]
7fff97863000-7fff97884000 …
Run Code Online (Sandbox Code Playgroud)

c linux kernel linux-kernel vdso

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

为什么随机设备创建成本昂贵?

C++11 通过该库支持伪随机数生成<random>。

我看过多本书籍,其中提到持续构建和销毁std::random_device, std::uniform_int_distribution<>,std::uniform_real_distribution<>对象的成本非常高,并且他们建议在应用程序中保留这些对象的单个副本。

为什么创建/销毁这些对象的成本很高?这里的贵到底是什么意思呢?就执行速度、可执行文件大小或其他方面而言,它是否昂贵?

有人可以提供一些解释吗?

c++ random performance c++11

31
推荐指数
2
解决办法
2637
查看次数

静态内存分配的成本与C中的动态内存分配

我很有兴趣知道什么是内存分配的首选方法static vs dynamic是良好的性能(例如,运行时间),当你知道的对象/项目的确切数量C上Linux.少量对象(少量内存)以及大量对象(大量内存)的成本.

e.g., type A[N] VS type *A = malloc(sizeof(type) * N)

请告诉我.谢谢.

注意:我们可以对此进行基准测试,并可能知道答案.但我想知道解释这两种分配方法之间性能差异的概念.

c linux memory memory-management

16
推荐指数
3
解决办法
8392
查看次数

将epoll用于设备(​​/ dev/event/...)是否有效?

我正在开发一个单线程的进程applet,它创建一个代理虚拟设备(更确切地说是一个虚拟的Xbox 360 pad); 我设法使用uinput接口创建它,我正确设置它并且它工作得很好.

为了向这个虚拟设备提供命令,我从另一个真实接口(在这种情况下是PS3 pad)中读取事件,然后用这些标志打开真实的设备文件:

fd = open("/dev/input/event22", O_RDONLY); // open the PS3 pad
Run Code Online (Sandbox Code Playgroud)

主循环类似于(减去错误检查):

while(run) {
    input_event ev = {0};
    read(fd, &ev, sizeof(struct input_event));
    // convert from PS3 --> Xbox 360
    convert(ev);
    // write to the new virtual pad
    write(fd_virtual, &ev, sizeof(struct input_event));
}
Run Code Online (Sandbox Code Playgroud)

你可以想象这read(fd, &ev, sizeof(struct input_event));是一个阻塞调用,我希望有一种超时循环循环并检查其他事件/执行其他代码.

由于这些原因,我想read(fd...在epoll循环中封装该调用,所以我也可以暂停.

问题是,以这种方式完成它会有效吗?通过使用epoll_wait,我是否会对当前循环引入额外的延迟,从而延迟虚拟键盘的响应能力?

linux epoll event-handling linux-device-driver uinput

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

从Python中的二进制文件中提取特定字节

我有非常大的二进制文件,其中包含y个传感器的x个int16数据点,以及带有一些基本信息的标题.二进制文件写为y值,每个采样时间最多x个样本,然后是另一组读数,依此类推.如果我想要所有数据,我使用的numpy.fromfile()工作非常好,速度快.不过,如果我只想传感器数据或只有特定的传感器的一个子集,我现在有一个可怕的双for回路,使用file.seek(),file.read()和struct.unpack()那需要永远.还有另一种方法可以在python中更快地完成这项工作吗?也许mmap()我不明白?或者只是使用整体fromfile()然后再采样?

data = numpy.empty(num_pts, sensor_indices)
for i in range(num_pts):
    for j in range(sensor_indices):
        curr_file.seek(bin_offsets[j])
        data_binary = curr_file.read(2)
        data[j][i] = struct.unpack('h', data_binary)[0]
Run Code Online (Sandbox Code Playgroud)

遵循@rrauenza的建议mmap,这是很好的信息,我编辑了代码

mm = mmap.mmap(curr_file.fileno(), 0, access=mmap.ACCESS_READ)
data = numpy.empty(num_pts,sensor_indices)
for i in range(num_pts):
    for j in range(len(sensor_indices)):
        offset += bin_offsets[j] * 2
        data[j][i] = struct.unpack('h', mm[offset:offset+2])[0]
Run Code Online (Sandbox Code Playgroud)

虽然这比以前更快,但它仍然比数量级慢几个数量级

shape = (x, y)
data = np.fromfile(file=self.curr_file, dtype=np.int16).reshape(shape)
data = data.transpose()
data = data[sensor_indices, :]
data …
Run Code Online (Sandbox Code Playgroud)

python mmap numpy seek fromfile

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