穿黑衣服你是你,穿灰衣服你也还是你
2018-03-23 16:22
120 查看
#include<stdio.h> struct st_t { int status; short *pdata; char errstr[32]; }; int main(void) { struct st_t st[16]; char *p = (char *)(st[2].errstr + 32); printf("%d", (p - (char *)(st))); while (1) { ; } return 0; }
这个主要让我们知道,不管你怎么变化,不变的是实质。
其他不多说,主要是
(p - (char *)(st))这个其实等价于st[3]的首地址(仅仅局限于这个特定题目,具体看下面的随堂测试),只是变了一个方式展示自己。 32和64位中,指针一个四字节,一个8字节。
X86:
X64:
如果你觉得你搞懂了,那么做个随堂测试吧:把32改成31
#include<stdio.h> struct st_t { int status; short *pdata; char errstr[31]; }; int main(void) { struct st_t st[16]; char *p = (char *)(st[2].errstr + 31); printf("%d", (p - (char *)(st))); while (1) { ; } return 0; }
此时在X86和X64上应该输出多少?(答案在下方)
Answer:
默认8字节对齐时,X64:143 X86:119
默认4字节对齐时,X64:131 X86:119
这个我在以前的随笔中有说过《结构体内存对齐深度剖析》
相关文章推荐
- [乐意黎转载]依依服装店某一天将两件不同的衣服均以每件120元出售,结果一件赚20%,另一件赔20%,那么商店老板是赚了,还是亏了?赚(亏)了多少元?
- 给这场运动命名:开放源码还是自由软件?
- 给Chrome穿上Android的衣服
- 先问一下!我写的文章是专门给人看的,还是给自己看的。
- hdu 1233 还是畅通工程 水题~~~~~~~~~kruskal算法AC
- 重启Tomcat后还是登录状态
- CaaS“容器即服务”:是营销手段,还是有其价值?
- WAP的问题还是没有解决
- (学)无论是CallContext还是HttpContext,都不能自动实现数据的跨线程传递?
- 你是想读书,还是想读完书?
- 数据库分库分表(sharding)系列(三) 关于使用框架还是自主开发以及sharding实现层面的考量
- 判断请求的浏览器是pc还是wad端
- 二分法--案列(烘干衣服 poj3104)
- 不知道是不是VS的bug还是MSI的bug!!VS2003.net打包安装程序的怪现象
- ERP:“造势”,还是“做事”
- 日本人的名字是姓在前还是名在前
- [LeetCode] Path Sum II, 关于效率的两个问题: vector还是queue? 传递引用还是拷贝?
- Ubuntu安装“启动引导器”的设备选哪一项,选默认还是选/boot分区?
- 关于mybatis用注解还是xml的思考
- 爱的献礼还是祭礼