我编写了几个程序,发现当在64位编译时,内存映射段(例如共享对象和共享内存保存)总是位于7f9aca84a000-7fff88400000左右但从未完全相同.
我想知道x86_64架构(ELF64)上的内存段是否有固定的起始地址,或者该段的最大和最小范围是多少?
这就是为什么我问这个问题.我们正在将系统从Tru64 UNIX迁移到Linux.该系统使用IPC Sys V共享内存的复杂固定内存映射,并使用链表在该段内从结构转到另一个.由于这段代码的大小和复杂性,以及我们手头有限的时间,我们正在尝试找到一种可靠的方法来修复共享内存的开始(有效地使用带有指定地址的shmat来附加段).对于64位,虚拟地址空间是如此巨大(48位有效可能的地址),选择"安全"固定地址比32位更容易,风险更小.
我有一个 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) 我有一个脚本,使用正则表达式查找文件.代码如下:
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解决方案更慢吗?