qbqbqbqb

qbqbqbqb

V2EX 第 143992 号会员,加入于 2015-10-23 12:47:57 +08:00
今日活跃度排名 4110
根据 qbqbqbqb 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
qbqbqbqb 最近回复了
3 天前
回复了 jeesk 创建的主题 Linux Manjaro 能不能设置开机自动连接 wifi ?
NetworkManager 的网络配置项是分用户级配置和系统级配置的。

你把 NetworkManager 里的 WiFi 配置设置成“所有人都可以连接”就可以不用登录也能自动连接了。(唯一缺点是 WiFi 密码会变成明文存储)
del 不是删除对象,是删除变量。可以近似理解成,语义上相当于一个更强的"=null"(和 Java ,C#等语言相比).
就和你在 Java 里写如下代码一样:
AppConfig app = AppConfig.getInstance();
app = null;
这样做显然不会销毁单例。和 Python 里的这种情况是一回事。
3 天前
回复了 zamaojava 创建的主题 程序员 学习链接的时候的对重定位的疑问
@qbqbqbqb 再补充一下,PC 相对寻址其实是 64 位引入的,32 位里 offset(%eip)只能用在跳转语句上,所以 32 位里用的比较多的还是绝对寻址的方式。而 64 位的话就因为寻址范围的原因,PC 相对寻址更常用。
3 天前
回复了 zamaojava 创建的主题 程序员 学习链接的时候的对重定位的疑问
@qbqbqbqb 更正一下,偏移量是有符号的,所以 R_X86_64_32 的范围只有 2G ,上面错写成 4G 了
3 天前
回复了 zamaojava 创建的主题 程序员 学习链接的时候的对重定位的疑问
补充一下 x86 的几种内存寻址方式,总体上其实就 2 种(这里不讨论寄存器寻址和立即数寻址):

寄存器相对寻址,AT&T 汇编写法是 offset(base, index, scale)
1 )地址计算方法是 base + index*scale + offset
2 ) base 和 index 是寄存器,offset 是 32 位立即数(直接写在指令里的常数),scale 是 1,2,4,8 中的一个
3 ) scale, index, base 可以依次省略( scale 默认为 1 ,其它默认为 0 ,有 base 的时候不能省略括号,否则省略括号),不省略 base 的时候可以省略 offset

程序计数器(PC)相对寻址,32 位写法 offset(%eip),64 位写法 offset(%rip)
1) 中间那个特殊的寄存器是程序计数器( Program counter, PC ),代表的是将要执行的下一条指令的地址。
2) 只能指定一个 32 位立即数偏移量,不能做其它计算。

全局变量的地址一般是写在 offset 的位置的。这就是为什么 x86 的 ELF 里就这几种寻址方式的原因。
3 天前
回复了 zamaojava 创建的主题 程序员 学习链接的时候的对重定位的疑问
@LotusChuan 你说的这种是基于 PLT 的相对寻址( R_X86_64_PLT32 ),用于 shared 库的。

OP 说的 R_X86_64_PC32 是基于程序计数器(当前代码执行地址)的相对寻址,是用于可执行文件内部的,这种相对寻址不用修改任何东西。用这个的原因主要有两部分
1. 现在的操作系统为了安全,不仅 shared 库是随机地址加载(基于 PLT ,动态链接的时候需要修改程序里的基地址;这个特性称为 Position-independent code, PIC ),就连可执行文件本身的代码段、数据段也是随机加载(整体上加了一个随机偏移量,相对当前执行代码的位置不变,所以可以用基于 PC 的相对寻址,不用修改任何基地址;这个特性称为 Position-independent executable, PIE )
2. R_X86_64_32 绝对寻址,全称是 32 位绝对寻址,使用的地址长度只有 32 位,能寻址的范围定死在 0x0~0xffffffff ,如果用这种的话程序的全局部分(代码段+数据段)就只能使用低 4G 的虚拟地址空间了;而 R_X86_64_PC32 虽然寻址范围也只有这么大,但它的寻址窗口是随着当前执行代码的位置滑动的,整体上可以寻址范围更大。

至于为什么只有这几种寻址方式,是因为 x86 指令集里寻址的偏移量就只有 32 位。
如果需要用 64 位绝对寻址的话,就需要通过寄存器来相对寻址,原来 1 条指令变成 2 条(先把 64 位地址加载到某个通用寄存器,再执行想要的计算),效率比较低,所以只有必要的情况才会用这种方式。默认情况下程序都是用的上述几种 32 位偏移量的方式。
@zlstone 现在 GitHub 账号设置里面有一个是否允许用自己的代码仓库训练 Copilot 的选项
@css3 有的插件的格式化功能直接 new 的文件里是没有效果的(设置了语言也不行,比如 Python ),必须先保存一下才能用。
VSCode 有格式化功能,名称是 Format document (可以在 F1 命令面板里使用),快捷键 Alt+Shift+F 。

要安装对应语言的插件才能用。

用之前要先保存文件,直接 new 的文件不行。
所有方法都 O(1)是不行的
可以做到所有方法都是 O(log n)

主要有两大类:
* 跳跃表( skip list ),单次操作时间复杂度为期望 O(log n),实现较为简单
* 带有 order statistics 的平衡二叉搜索树(包括 AVL, 红黑树, Splay 等多种实现),根据实现的不同,单次操作时间复杂度为期望、均摊或严格 O(log n),实现较为复杂
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1640 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 17:20 · PVG 01:20 · LAX 10:20 · JFK 13:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.