c语言如何判断元素字节,如何检查C语言中的指针是否属于某种类型?

这里所有的答案都说“你不能”,他们是对的。你不能。

但是,我甚至不敢提它

可以玩的游戏。这些游戏是

坏主意。

在任何情况下我都不推荐他们。

比赛是什么?将多余的数据位填充到地址的未使用部分中,然后在使用地址的任何地方将它们剥离出来。

所以假设您有指向32字节大小的结构或类的指针。如果您确保您的内存分配与32字节的地址对齐(这对于动态分配很容易,但对于堆栈地址来说更难保证),那么地址的低阶位将全部为0。这意味着在地址的底部有5个空闲位,足以放置标志、ID号、状态值等。存储空间是空闲的!

即使你有一个奇怪的结构大小,实际上任何C或C++编译器和操作系统都会将每个地址对齐到4个字节。

在64位中,通常可以在地址的高端找到大量的空闲位…很可能有16个空闲未使用的位,等待您。当然,这取决于操作系统。还有一个坏主意要考虑。你喜欢危险,不是吗?

两个缺点是:

你必须确保掩盖

在你尝试之前先把价值观拿出来

取消对指针的引用或传递指针

任何可以尝试的东西。这使得

丑陋的代码。

你跳得太远了

愚蠢的悬崖

危险。这就像喝一杯

一瓶龙舌兰酒和一个磨损的

用钢索套住饥饿的老虎。裸体。

有太多的方法,这将爆炸成臭虫,崩溃,和痛苦。还记得我说过编译器将内存至少对齐到4个字节吗?嗯,那是真的。直到你找到一个新的操作系统,而你是老虎的食物。

所以不要这样做。

但是,也就是说,这确实是一种向每个地址添加一点额外信息的方法,比如输入一个数字。你可能会在

every-byte-counts code

Obfusicated C.

附言:真的,我是认真的,不要这样做。即使你喜欢老虎。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值