小编Huy*_*ens的帖子

ELF64/x86_64和内存映射段的起始地址(用于共享对象)

我编写了几个程序,发现当在64位编译时,内存映射段(例如共享对象和共享内存保存)总是位于7f9aca84a000-7fff88400000左右但从未完全相同.

我想知道x86_64架构(ELF64)上的内存段是否有固定的起始地址,或者该段的最大和最小范围是多少?

这就是为什么我问这个问题.我们正在将系统从Tru64 UNIX迁移到Linux.该系统使用IPC Sys V共享内存的复杂固定内存映射,并使用链表在该段内从结构转到另一个.由于这段代码的大小和复杂性,以及我们手头有限的时间,我们正在尝试找到一种可靠的方法来修复共享内存的开始(有效地使用带有指定地址的shmat来附加段).对于64位,虚拟地址空间是如此巨大(48位有效可能的地址),选择"安全"固定地址比32位更容易,风险更小.

c linux shared-memory memory-layout memory-mapping

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

向 btrfs 卷添加新设备,但可用大小几乎没有增长

我有一个 btrfs 卷,它已经包含两个不同的设备,并且安装在 /samples 上。据报道,其总大小为 194GB df

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sdc1       194G  165G   20G  90% /samples
Run Code Online (Sandbox Code Playgroud)

现在,我想从另一台设备向该卷添加另外 500GB。我做了

$ sudo mkfs.btrfs -m raid0 -d raid0 /dev/sdb
$ sudo btrfs device add /dev/sdb /samples
Run Code Online (Sandbox Code Playgroud)

我的文件系统现在正确报告:

$ sudo btrfs filesystem show
Label: none  uuid: 545e95c6-d347-4a8c-8a49-38b9f9cb9add
    Total devices 3 FS bytes used 161.98GB
    devid    3 size 465.76GB used 0.00 path /dev/sdb
    devid    2 size 93.13GB used 84.51GB path /dev/sdc1
    devid    1 size 100.61GB used …
Run Code Online (Sandbox Code Playgroud)

linux filesystems raid

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

查找-regex比查找速度慢 grep的

我有一个脚本,使用正则表达式查找文件.代码如下:

find $dir | grep "$regex"
Run Code Online (Sandbox Code Playgroud)

脚本运行有点太慢,我想优化它.搜索需要一些时间来执行,我希望从中获得更好的性能.我试过这个尝试:

find $dir -regex ".*${regex}.*"
Run Code Online (Sandbox Code Playgroud)

由于没有创建额外的进程来解析正则表达式,因此我期待结果稍快一些.

然而结果是不同的,令我惊讶的是,命令"find | grep"比"find -regex"更快(虽然它需要更多的系统时间,正如人们所期望的那样)

我把这个行为计时了:

找到| grep结果

real   0m12.467s
user   0m2.568s
sys    0m7.260s
Run Code Online (Sandbox Code Playgroud)

找到-regex结果

real   0m16.778s
user   0m6.772s
sys    0m6.380s
Run Code Online (Sandbox Code Playgroud)

你知道为什么find -regex解决方案更慢吗?

regex bash grep find

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