免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5450 | 回复: 17
打印 上一主题 下一主题

[C++] 可不可以把指针最后一位当作flag [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-04 19:55 |只看该作者 |倒序浏览
本帖最后由 Frahm 于 2013-04-04 20:03 编辑

指针最后一位是否总是0,能不能用来当作flag使用呢?这样做是否具有较好的移植性呢?
补充下说明,这里的指针是malloc出来的,换句话说是否malloc出来的内存首地址总是2的倍数呢?

论坛徽章:
0
2 [报告]
发表于 2013-04-04 20:05 |只看该作者
新人,学习下。

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
3 [报告]
发表于 2013-04-04 20:06 |只看该作者
你是说你malloc了一个指针void *, 然后记录在void **里, 然后对void **这个指针的最后1bit做修改?

还是说你指针和内存都分不清楚?

malloc的内存肯定是sizeof(int)对齐的.

论坛徽章:
0
4 [报告]
发表于 2013-04-04 20:07 |只看该作者
回复 3# linux_c_py_php


    抱歉,我表述不清。是调用malloc,返回的指针

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
5 [报告]
发表于 2013-04-04 20:10 |只看该作者
No you can't.
ex. 1
char *s =new char[333];
ex. 2 (works in x86)
int *ps =new int[2];
int *p =(int *)&(char *s)[1];
in x86, (int *)0xffff01; is a valid int pointer and not trigger any error.

论坛徽章:
0
6 [报告]
发表于 2013-04-04 20:11 |只看该作者
本帖最后由 Frahm 于 2013-04-04 20:13 编辑

哦,我记得貌似malloc出来的内存保证对齐所有基本类型,也就是sizeof(double), 也就是说至少低三位是0?

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
7 [报告]
发表于 2013-04-04 20:13 |只看该作者
我认为这样没有问题, 但我建议走正规做法: 封装一个Malloc: malloc的时候多分配1字节在头部, 在里边记录点你喜欢的信息, 返回malloc+1的地址. 并提供对应的Free.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
8 [报告]
发表于 2013-04-04 20:15 |只看该作者
不过你把指针存的地址都改了,你还怎么访问指向的内存呢? 想法很怪异.

论坛徽章:
0
9 [报告]
发表于 2013-04-04 20:17 |只看该作者
回复 5# folklore


  第一个例子是说明malloc可能返回奇数地址?第二个没看太懂,(char* s)那块

论坛徽章:
0
10 [报告]
发表于 2013-04-04 20:21 |只看该作者
回复 8# linux_c_py_php


    我想在每个地址上加一个flag,如果可以确保至少最后一位总是0,那么取的时候可以用位运算得到正确地址,这样做是为了不在每个指针后面占用1个byte
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP