- 主题:[转载]你的 ABI 是错的
实际上只读struct参数都是传const指针的,没有人传值或者拷贝一份再传非const指针。
ABI里是没谈const指针,但你打开头文件看看crt传struct是不是都用的const指针。
这文章不像2021年写的,倒像1991年写的。
他对restrict的理解也不对。实际上只要传const指针,就向编译器表明了被调用者不会修改struct。没必要传单个struct指针还写restrict,它和哪个参数alias啊?crt只在传多个指针时才用restrict。
【 在 ble 的大作中提到: 】
: 大概是说
: calller () {
: Object obj;
: ...................
--
修改:ilovecpp FROM 58.37.58.*
FROM 58.37.58.*
我的意思就是现实中哪有“传值的结构体”?虚空打靶。
另外C语言里struct传值,对被调用者是可写的。你ABI不可能用传const指针来实现传值,代码都不兼容。
【 在 ble 的大作中提到: 】
: 原文说的是不是只读结构体,是说的传值的结构体。
--
修改:ilovecpp FROM 58.37.58.*
FROM 58.37.58.*
【 在 ble 的大作中提到: 】
: 传值的就是caller(Object obj)这种明面上的。
我上面说了,现实中就没人这样写,不知道作者对着虚空打什么靶。
而且我引一下原文:
A correctly-specified ABI should pass large structures by immutable reference
你caller(Object obj)能实现成"pass by immutable reference"?这是C语言?
: 原文也说的,实现实际上大多是传指针。就是对拷贝该由谁负责有点异议而已。
传指针毫无异议。无论传const指针(只读参数)还是非const指针(可写参数),没有哪个caller会去拷贝的。
--
FROM 58.37.58.*