返回信息流请教一下,比如一个整型的数组,指针的步长就是sizeof(int),是相等的,他们两个是谁决定谁的呢?比如是sizeof(int)决定的指针步长,那么sizeof(int)又是怎么来的,int占内存的大小是编译器决定的,那么sizeof(int)又是通过什么原理计算的?
这是一条镜像帖。来源:北邮人论坛 / cpp / #98846同步于 2019/4/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
指针的步长和sizeof
ye2016111062
2019/4/20镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
1. 数据类型所占内存大小是由 CPU 架构决定的;
2. 至少在我的学习印象中,sizeof 和指针步长没有谁决定谁的关系,指针步长只跟自己的数据类型有关系,比如一个 char 类型的指针 ptr,那么 `ptr + 1` 的效果就是向前移动的字节数为 char 类型的大小;如果 ptr 的类型是 int,那么就是向前移动的字节数为 int 类型的大小;
3. sizeof 操作符是 C 语言标准的一部分,具体是由编译器实现的,具体实现我不知道。
sizeof是个宏,这个在库里就写好了,你去看源码,估计会有很多ifdef来判定用的是什么处理器,根据处理器来算的。
指针加加的时候,编译器知道你定义的数据类型的内存长度是多少,自动换算就行了,具体你去看下elf文件,里面会讲到。
说到底就是看规定,这个处理器的编译器规定了int是多长,然后大家都用一样长度就可以了。
"数据类型所占内存大小是由 CPU 架构决定的",
准确的说法应该是数据类型所占内存大小是由编译器决定的,而编译器确定数据类型内存结构的依据来源自编译目标的cpu架构,毕竟要把交叉编译的问题考虑进去
【 在 nitroethane 的大作中提到: 】
: [md]
: 1. 数据类型所占内存大小是由 CPU 架构决定的;
: 2. 至少在我的学习印象中,sizeof 和指针步长没有谁决定谁的关系,指针步长只跟自己的数据类型有关系,比如一个 char 类型的指针 ptr,那么 `ptr + 1` 的效果就是向前移动的字节数为 char 类型的大小;如果 ptr 的类型是 int,那么就是向前移动的字节数为 int 类型的大小;
: ...................
好的,谢谢
【 在 tinyCoder (这就是小号) 的大作中提到: 】
: sizeof是个宏,这个在库里就写好了,你去看源码,估计会有很多ifdef来判定用的是什么处理器,根据处理器来算的。
: 指针加加的时候,编译器知道你定义的数据类型的内存长度是多少,自动换算就行了,具体你去看下elf文件,里面会讲到。
: 说到底就是看规定,这个处理器的编译器规定了int是多长,然后大家都用一样长度就可以了。