指针可以有不同的大小吗?
Can pointers be of different sizes?
本文关键字:指针 更新时间:2023-10-16
这个答案伴随着一个有趣的陈述——"在int*
小于char*
的机器上"。(让我们排除指向函数的指针)
指向不同类型的指针可能有不同的大小吗?为什么这是有用的?
是的,完全有可能。在某些机器上,指向字节的指针包含两个值:指向包含该字节的内存字的WORD地址的指针,以及给出该字节在字中的位置的"字节索引"。例如,在32位机器上,"字节索引"是0..3。
这将比"int *"需要更多的存储空间,"int *"只是一个指向相关单词的指针。
在字寻址机器上,char*
可能需要包含部分字信息,使其比int*
大。
language-lawyer标签意味着您正在询问c++及其兼容的实现,而不是某些特定的物理机器。
我不得不引用整个标准来证明它,但简单的事实是,它不能保证sizeof(T*)
对任何T
的结果,并且(作为推论)不能保证sizeof(T1*) == sizeof(T2*)
对任何T1
和T2
)。
是的,指针不能保证具有相同的大小,尽管在大多数现代体系结构中,它们实际上是相同的。
当涉及到数据指针和函数指针时,这一点很有用。过去,函数指针(用于跳转到可执行代码中的特定部分)需要所谓的"远指针",它比数据指针宽。
我可以想象一台机器,它是有意义的假设int
数组的内存需求将远远小于char
数组的内存需求。
char
数组。在这种情况下,一个字节可以满足int*
,而char*
需要四个字节或更多。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错