V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
V2EX  ›  GeruzoniAnsasu  ›  全部回复第 147 页 / 共 172 页
回复总数  3429
1 ... 143  144  145  146  147  148  149  150  151  152 ... 172  
想看这篇玩意的原文。。
@feather12315 行 8,就当做 x86 扩展到 64 位的各种架构不统一必须叫自己的名字好了

想补充吐槽一下“保存”这个词
我猜原文说的是 preserve?
在 intel 的手册 38.3.2

> As with most systems, it is the responsibility of the callee to preserve all registers except that used for returning a
value.

应该译作“保护”,我 2#的意思说反了,lz 说的东西的原意应该是

“被调函数有义务保证 rbp rbx r12~r15 这几个寄存器的值在进出函数前后一致”

如果按照 lz 的疑问是“为什么被调 routine 可以随意修改这么多寄存器的值不需要负责任”来理解的话

……只能回复说,恩,官方其实是建议负责任的,但可能现行 ABI 制定者觉得没必要
首先 x86 跟 x86_64 不一样。。。x86_64 一般简写成 x64

然后 bp bx r12 r13 r14 r15
vs
ax cx dx di si sp r8 r9 r10 r11
。。是咋得出被调用者保存少的结论的
2019 年 1 月 29 日
回复了 icemanpro 创建的主题 C 如何将 list 转换成可变长参数?
@icyalala
@catror
@enenaaa
可以理解为,x64 只有一种调用约定,但有两个不同平台版本的实现
尝试在编译到 x64 的源码函数上声明 stdcall 或 cdecl 都会被编译器忽略

另外不定参函数这种东西,在 C++中必定是与变参模板同时存在的,在 C 中,变参函数实际上就是变参泛型的 approach, “运行时不定个数”类的东西不会用变参函数来写,一定会封装成某种数据结构并把指针传进去。无论 C 还是 C++,变参函数都是用来方便“静态不定个数参数的调用”的,C++通过变参模板给它加了更强的约束而已。

所以最开始就想说,参数不能像 lz 设想的那样传,传一个“运行时不定长”的东西给变参函数本来就是错误的做法
2019 年 1 月 29 日
回复了 icemanpro 创建的主题 C 如何将 list 转换成可变长参数?
啊。。。原来 fastcall 是用 6 个寄存器
2019 年 1 月 29 日
回复了 icemanpro 创建的主题 C 如何将 list 转换成可变长参数?
@icyalala 其实是不太想解释

首先如果是传参数进来,在函数里用 va_系列宏去解开传进来的变长参数,是可以用的,因为 x64 默认的 fastcall 约定虽然用寄存器传参,但会在栈上放一个副本,还是有地址可引用。不过放副本这个操作是被调函数的 prologue 做的,从外面打包参数进来的时候前 4 个参数还是只会通过寄存器传递。

如果非要 hack 的话确实可以内嵌一下汇编先把前 4 个参数放进寄存器其余的压栈,但这样 hack 的话连 call 也必须要用汇编嵌进去并且返回后手动 add rsp 恢复栈平衡,更要命的是在 win 和 linux 上同样是 fastcall 约定用到的寄存器还不一样,还得针对平台写两套汇编

虽然总共代码也不多,但总觉得崩的可能性太大了,想强迫 lz 先想其它的方法解决
2019 年 1 月 29 日
回复了 icemanpro 创建的主题 C 如何将 list 转换成可变长参数?
本来想说不能这么传

然后再看了几遍。。。。foo 是已存在已定义不可改的接口吗。。那我觉得没有写法能帮你

va_list 在 x64 上没法用
2019 年 1 月 29 日
回复了 pinews 创建的主题 宽带症候群 深思熟虑告诉你,为什么要搞 ipv6
复制粘贴:
> 我以为民科的特点就是在不了解不考虑甚至有意忽略事实原由的情况下仅凭想象推测结论。

你的想法都对,但并不是建立在事实上的
2019 年 1 月 29 日
回复了 abclearner 创建的主题 奇思妙想 请大家学会拒绝服务攻击
我理解的拒绝服务攻击是,本来我们桌吃得好好的,结果隔壁突然有人掀桌子骂服务员搞的我们叫服务员点菜都不理我们了
2019 年 1 月 29 日
回复了 Oathbinder 创建的主题 算法 如何设计一个二叉平衡树的 key
。。更新行号这个行为已经必定是线性的,除非每次插入时不更新所有行号

这样的话大概需要一个表记录从某行之后的所有行号进行了怎样的偏移,然后在合适的时间一次过全部更新,尽可能减少 O(n)遍历所有元素的次数让复杂度逼近 logn
2019 年 1 月 28 日
回复了 varzy 创建的主题 问与答 有什么适合父母使用的娱乐向 app?
@terence4444 (供)娱乐 向
@horizonl 我的天……你指望能跟十几岁初中生一起好好欣赏电影?真的一起看看动画还行,晦涩看不懂的起码人少,偏偏是观看门槛低题材又大多相对严肃的电影。。。说看不懂的有一半,瞎解析的有 1/8,评论区像看中学作文,反正我是不太想在 b 站看(非动画)电影,啥时候 B 站观影人群跟豆瓣重合了可能就能看了。

哪怕矫情点小资点做作点呢,那起码算作过度表达,B 站弹幕评论区(包括长评)是什么水平,感觉就像听邻居小朋友在讨论国家大事,除了想笑不知咋形容

还不如更没营养的音乐区
??? B 站不是只有番剧动画区吗
@ysc85
@pinews

ipv9 了解一下,你们的思路跟民科很相像

以防又有路过群众说我扣民科帽子,我以为民科的特点就是在不了解不考虑甚至有意忽略事实原由的情况下仅凭想象推测结论。
首先 ip 是某种计算机网络协议,
这个协议规定地址这个字段就是
32bit4 字节二进制数。1.2.3.4 只不过是“把这 4 字节顺序按高位字节排在前面的顺序每字节用一个十进制数表示”表示的方式而已
32bit 总共也就能表示 2^32 个不同地址,这是 ip 地址不够用的本质。
怎么在这个基础上扩容?把互联网局域网凡是 IP 协议的所有流量的所有数据包中“地址”这部分全部加长,4 字节不够用,干脆*4 得了,直到宇宙尽头都够用了。大家不也都是这么想的吗
行,接下来考虑怎么“把互联网局域网凡是 IP 协议的所有流量的所有数据包中‘地址’这部分全部加长”这件事。
v4 到 v6 漫长的过渡期以及内核中两套代码几乎一样的协议栈实现就是为了达成这个目标的。

那有的人会说了,哎我能不能,不
“把互联网局域网凡是 IP 协议的所有流量的所有数据包中‘地址’这部分全部加长”
啊?

可以啊,电话分机都熟悉吧,但问题是,你分机号也是 1001,我分机号也是 1001,哎万一我又不知道自己公司前台电话是多少,或者前台压根就没人,我怎么让你找我?分机号总共 1000 个,今天我司喜迎 1001 个员工咋办,哎没关系,给各部门先分一台分机,先转部门,部门再转接个人,简单。

简单吗?

假设某些蠢人会说
“那别要前台嘛,要啥人工嘛,用交换机嘛”
“分机号不好记,语音助手嘛,说名字就能转了”

————难到不是大家加个微信记个私人手机号就完事了?仅仅是长一点而已嘛
1 ... 143  144  145  146  147  148  149  150  151  152 ... 172  
About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   893 Online   Highest 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 42ms · UTC 21:45 · PVG 05:45 · LAX 14:45 · JFK 17:45
♥ Do have faith in what you're doing.