水木社区手机版
首页
|版面-C++程序设计语言(CPlusPlus)|
新版wap站已上线
返回
首页
|
上页
|
2/2
|
转到
主题:今天掉进一个不算坑的坑
10楼
|
DoorWay
|
2020-10-21 13:26:04
|
只看此ID
啥原理
【 在 fanci 的大作中提到: 】
: 实例指针可以,0指针不行
--
FROM 124.114.151.*
11楼
|
fanci
|
2020-10-21 13:28:22
|
只看此ID
https://devblogs.microsoft.com/oldnewthing/20160224-00/?p=93081
【 在 DoorWay () 的大作中提到: 】
: 啥原理
: 【 在 fanci 的大作中提到: 】
--
FROM 203.145.95.*
12楼
|
DoorWay
|
2020-10-22 09:18:22
|
只看此ID
你意思是传个不为0的值,比如1,返回值减去1,即是offset?
真猥琐的方法。陈Raymond的整篇文章都没有你这个暗含的作差难懂。
【 在 fanci 的大作中提到: 】
:
https://devblogs.microsoft.com/oldnewthing/20160224-00/?p=93081
--
FROM 124.114.151.*
13楼
|
txgx
|
2020-10-22 11:09:00
|
只看此ID
https://www.cnblogs.com/aceheart/articles/3229638.html
其中,整个程序中最关键的部分就是如何求出结构体中某个成员相对于结构体首地址的偏移量。
这里的解决方法是:假设存在一个虚拟地址0,将该地址强制转换成为该结构体指针类型(struct id*)0。那么地址0开始到sizeof(struct)-1长度的内存区域就可以视为一个结构体的内存。
这样结构体中任何一个元素都可以通过对该结构体指针解引用得到。
由于该结构体的起始地址为0,因此任何一个成员的地址应该等于其相对于结构体起始地址的偏移,这也就是计算偏移量的方法:
#define STRUCT_OFFSET(id, element) ((unsigned long) &((struct id*)0)->element)
Linux内核里面的list_entry宏就是这样的。
【 在 fanci 的大作中提到: 】
:
https://devblogs.microsoft.com/oldnewthing/20160224-00/?p=93081
--
FROM 42.234.94.*
14楼
|
ble
|
2020-10-22 13:44:48
|
只看此ID
c++标准有保证多继承的时候来自A和B的元素layout的顺序吗?
【 在 fanci 的大作中提到: 】
: 得亏我及时一通搜索搞定。是这样的:
: 有三个类 A, B, C,其中 A和B都非空,而C同时继承A和B,即 struct C : A, B {...};
: 那么从 C的指针 static_cast 到 B的指针是会改变指针的值的。我想计算这个偏移量(有几字节),于是我搞了这么个:
: ...................
--
FROM 222.129.49.*
首页
|
上页
|
2/2
|
转到
选择讨论区
首页
|
分区
|
热推
BYR-Team
©
2010.
KBS Dev-Team
©
2011
登录完整版