首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么时候sizeof(int)在Objective-C中不是4个字节?

当sizeof(int)在Objective-C中不是4个字节时,通常是在特定的硬件架构或操作系统上。Objective-C是一种编程语言,它是C语言的扩展,用于开发苹果平台的应用程序。在Objective-C中,sizeof(int)的大小取决于底层硬件架构和操作系统的实现。

在32位的系统上,sizeof(int)通常是4个字节。而在64位的系统上,sizeof(int)可能会是4个字节,也可能是8个字节,具体取决于编译器的实现。在苹果的64位系统上,sizeof(int)通常是4个字节,而在其他系统上,可能会是8个字节。

在Objective-C中,如果需要确保整数类型的大小,可以使用固定大小的整数类型,如int32_t、int64_t等。这些类型在stdint.h头文件中定义,可以确保在任何平台上都具有相同的大小。

总之,sizeof(int)在Objective-C中不是4个字节的情况,通常是由于特定的硬件架构或操作系统实现导致的。如果需要确保整数类型的大小,可以使用固定大小的整数类型。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NSObject对象占用多少个字节

Objective-C,我们可以通过一些方法来获取一个NSObject对象占用多少字节 代码获取NSObject实例对象的成员变量字节大小 * 获取一个NSObject实例对象的成员变量所占用的字节大小...注意 Copy items if needed 不勾选 // 然后Build Phases删除main-arm64.cpp编译选项(选中文件点减号或按delete键)...16; return size; } CoreFoundation框架里的硬性规定,内存对齐,小于16就会设置为16 用Xcode打断点看内存结构 打上断点 image.png Xcode...答案是,都是16 大概的内存结构图 image.png 有内存对齐的原因,结构体的大小必须是最大成员大小(16)的倍数 Objective-C不同数据类型占用字节大小 可以通过sizeof来获取不同数据类型占用字节大小...sizeof其实不是一个函数,仅仅只是一个操作运算符罢了,编译时就确定了的 类型 32位机器 64位机器 BOOL 1 1 bool 1 1 int 4 4 short 2 2 long

65830

一个NSObject对象占用多少个字节

Objective-C,我们可以通过一些方法来获取一个NSObject对象占用多少字节 代码获取NSObject实例对象的成员变量字节大小 * 获取一个NSObject实例对象的成员变量所占用的字节大小...注意 Copy items if needed 不勾选 // 然后Build Phases删除main-arm64.cpp编译选项(选中文件点减号或按delete键)...16; return size; } CoreFoundation框架里的硬性规定,内存对齐,小于16就会设置为16 用Xcode打断点看内存结构 打上断点 image.png Xcode...答案是,都是16 大概的内存结构图 image.png 有内存对齐的原因,结构体的大小必须是最大成员大小(16)的倍数 Objective-C不同数据类型占用字节大小 可以通过sizeof来获取不同数据类型占用字节大小...sizeof其实不是一个函数,仅仅只是一个操作运算符罢了,编译时就确定了的 类型 32位机器 64位机器 BOOL 1 1 bool 1 1 int 4 4 short 2 2 long

66684

《Objective-C-高级编程》干货三部曲(二):Blocks篇

先看一下本文结构(Blocks部分): 需要先知道的 Objective-C 转 C++的方法 因为需要看Block操作的C++源码,所以需要知道转换的方法,自己转过来看一看: OC源文件block.m...我的思考是:既然我们无法Block改变外部变量的值,所以也就没有必要在Block内部改变变量的值了,因为Block内部和外部的变量实际上是两种不同的存在:前者是Block内部结构体的一个成员变量,后者是栈区里的临时变量...*static_val;//是指针,不是值 __main_block_impl_0(void *fp, struct __main_block_desc_0 *desc, int *_static_val...这两个函数调用的时机是什么时候呢?...Block时 什么时候Block被废弃呢?

1K10

【Golang】深究字符串——从byte rune string到Unicode与UTF-8

为此,Go代码引入了一个新术语,称为 rune。...虽有unicode对应,肯定是该多少字节就存多少字节,而不是每个字符都存相同大小字节,毕竟unicode有100多万,全存相同大小字节,肯定浪费空间。...但是就有了最终要解决的问题:什么时候该读3个字节以表示1个字符,什么时候该读1个字节以表示字符?...UTF-8就是存储Unicode的方式,但不是唯一的,其他utf-16,utf-32交给童鞋们自己探索,我们主要深究一下utf-8。来看下UTF-8是如何解决上面的问题: 什么时候读1个字节的字符?...字节的第一位为0,后面7位为符号的unicode码。所以这样看,英语字母的utf-8和ascii一致。 什么时候读多个字节的字符?

2.2K10

iOS - 聊聊 autorelease 和 @autoreleasepool

Objective-C 语言本身是支持 GC 机制的,但有平台局限性,仅限于 MacOS 开发,iOS 开发用的是 RC 机制。...begin的地址为:Page自己的地址+Page对象的大小56个字节; end的地址为:Page自己的地址+4096个字节; empty判断Page是否为空的条件是next地址是不是等于begin; full...那么iOS工程,方法里的autorelease对象是什么时候释放的呢?有系统干预释放和手动干预释放两种情况。...《Objective-C 高级编程:iOS 与 OS X 多线程和内存管理》 书中是说:ARC下,编译器会检查方法名是否以alloc/new/copy/mutableCopy开始,如果不是则自动将返回值的对象注册到...Q:ARC 环境下,autorelease 对象什么时候释放? 回到我们最初的面试题,ARC环境下,autorelease对象什么时候释放?我们就分系统干预释放和手动干预释放两种情况回答。

2.3K52

一、c++中经常被面试官面试的小问题总结(本篇偏向基础知识)

2.const对象的值不能被修改,const成员函数修改const对象数据成员的值是语法错误   3.const函数调用非const成员函数是语法错误   任何不会修改数据成员的函数都应该声明为...所以看完上面这句话就应该明白了函数定义后加const的用处,以及什么时候用到const,这会是一个好的编程习惯的。...很多人都是直接相加求值,但是sizeof对类以及结构体作用时会有一个字节对齐机制, 对齐机制的对齐方式为其最大成员对齐方式,会将定义变量的内存补全,方便系统运算。...c1的偏移量为0,i的偏移量为4,c1与i之间便需要3个字节填充。 c2的偏移量为8,那么结果就是1+3+4+1=9,由于这里最宽的字节int,4个字节。补全之后答案为12....1、内联函数在编译时展开,宏预编译时展开。 2、在编译的时候,内联函数可以被镶嵌到代码,而宏只是一个简单的文本替换。 3、宏不是函数,inline是函数。

93230

译文: 低调奢华有内涵的「Runtime」

当然,我是翻译了这篇文章,但是对Runtime的理解,还是很基础——主要是还没有太多实践,真实开发几乎也用不到,一如文章所说:「如果可以,避免使用Objective-C的Runtime……」。...最主要的,就是看方法的调用(什么时候、由谁决定、执行哪段代码,什么时候方法会被执行),还有类型绑定(什么时候决定一个变量会有什么类型)。...听起来很恐怖,不过不是说不要用Runtime了。某位大神曾经讲过:「能力越大,责任越大」。而我们November Five(译者:一家公司名)也一直尝试使用各种强悍的工具,让事情变得更美好。...节假日期间,我们通常每周会提交多个节日版本,很明显耐心等待人家修复这个问题并不是一种很好的选择。...:(SEL)sel方法动态地添加方法实现)。

96140

HotSpot JVMKlassoopDescoop的作用与关系

这里需要特殊指出的是,int[]数组Java内部其实也是一个Java对象,所以int[][].class对应的Klass是ObjArrayKlass,而不是TypeArrayKlass。...oopDesc的子类,arrayOopDesc代表的是数组类型的对象,InstanceOopDesc代表的是普通Java类的对象,markOopDesc并不是代表一个Java对象,它只是因为历史原因被放到了这个继承关系里...ArrayKlass的计算规则大体上是 sizeof(arrayOopDesc) + sizeof(int) 用来存放数组长度 + 要分配的数组长度 * 数组元素所占内存大小。...那什么时候需要创建它呢? 类被加载或定义的时候,也就是创建Klass对象的时候。 那既然已经有Klass对象了,为什么还要创建个java.lang.Class类型的Java对象呢?...,作为该Java类Java程序内的代表(该对象会被保存在Klass对象的_java_mirror字段)。

61320

iOS BAT面试对答题

对博主这种菜鸟而言,Runtime 实际开发,其实就是一组C语言的函数。 2.objc向一个对象发送消息时,发生了什么?...objc向一个对象发送消息时,runtime会根据对象的isa指针找到该对象实际所属的类,然后该类的方法列表以及其父类方法列表寻找方法运行,如果一直到根类还没找到,转向拦截调用,走消息转发机制,...objc编译时,[obj foo] 会被转意为:objc_msgSend(obj, @selector(foo));。 5.什么时候会报unrecognized selector的异常?...objc向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象实际所属的类,然后该类的方法列表以及其父类方法列表寻找方法运行,如果,最顶层的父类依然找不到相应的方法时,会进入消息转发阶段...54, 76, 45, 5, 63}; int num = sizeof(array)/sizeof(int); for(int i = 0; i < num-1; i++) { for(int j =

93100

自定义类型详解

后面再进行讲解 因此,结构体,结构体的自引用不是结构体里面包含同类型的结构体变量,而是包含同类结构体的指针。...计算机读取数据的时候,我们假设一次读取四个字节,通过观察这幅图,我们发现如果不按内存对齐的方式来存储,我们读取数据时,同样是读取两次,但是信息被切割成了两部分,还要重新进行组合,由此可见内存对齐的必要性...现实生活: 一周的星期一到星期日是固定有限的,可以一一列举出来。 月份有十二个月,也可以一一列举出来。 性别有男女之分,也可以一一列举出来。...同一时间,只能使用它的一个成员,因为它的成员共用一块空间,所以改动一个也会导致其他的成员发生改变。 什么时候使用联合体(共用体)呢:允许成员公用一块空间,并且共用一块空间时不会影响整体的使用。...char a[5];//对齐数是1 所占空间大小是5个字节 int i;//对齐数是4 }; int main() { union Un u; printf("%d\n", sizeof

7510

MD5加密原理解析及OC版原理实现 原

MD5算法,这个摘要是指将任意数据映射成一个128位长的摘要信息。并且其是不可逆的,即从摘要信息无法反向推演中原文,在演算过程,原文的内容也是有丢失的。      ...二、MD5的使用场景       MD5常用在密码加密,一般为了保证用户密码的安全,在数据库存储的都是用户的密码经过MD5加密后的值,客户端用户输入密码后,也会使用MD5进行加密,这样即使用户的网络被窃听...第3步:以标准的幻数作为输入     MD5的实现需要每512个字节进行一次处理,后一次处理的输入为前一次处理的输出,因此,循环处理开始之前,需要拿4个标准数作为输入,它们分别是: unsigned...*str); MD5算法处理的数据都是小端字节序的,而使用Objective-C处理的NSData对象的字节序是大端字节序,因此我们需要做一下转换。...有需要对字节数据进行循环左移的操作,循环左移函数实现如下: void ROL(unsigned int *s, unsigned short cx) { if (cx > 32)cx %= 32

1.9K10

关于粘包的解决方法

因此,实际工程应用,只有关键数据的传输才采用TCP,而普通数据的传输一般采用高效率的UDP。 ---- 什么时候容易出现TCP粘包? 长连接 + 不定长包 + 发包频繁。...彼定长,怕不是每次都只发送某个固定长度的包吧,那就没意思了。...我的定长的意思是,包头里面预留四个字节的空间,用来封包的时候加上包的长度,收包的时候这样收: 1、recv,return n; 2、读取包头,长度 m; 3、解析包头,获取整包(或包体)长度k 4、...(sendbuf.len)+num); ret = readn(clt_fd,&(recvbuf.len),sizeof(recvbuf.len));//读包头 4个字节 if(-1...(&rcv_pkt,0,sizeof(rcv_pkt));//清空结构体 ret = readn(fd,&(rcv_pkt.len),sizeof(rcv_pkt.len));//读包头 4个字节

25920

指针和数组笔试题解析

2、字符数组 sizeof 1、第一个代表整个数组的大小,里面总共6个元素,char类型,所以6个字节大小。 2、arr+0 代表的是第一个元素的地址,4个字节大小。...3、字符串数组 sizeof 1、系统计算这种字符串的数组的时候,会自动末尾补充 ‘\0’ ,sizeof也会将它计算在内,所以arr 计算的时候还会+1 ,所以结果是7个字节。...4、指针指向常量字符串 sizeof 1、p指向的是一地址,地址4个字节。 2、p+1指向第二个元素的地址,4个字节。 3、解引用得到第一元素,1个字节。...在这里把数组第二个元素的地址强制类型转化为了int类型 所以最终解引用打印出来的就是0x02000000 笔试题4  答案:1 解析:因为里面是三个逗号表达式,实际上只算最后的一个表达式,所以数组实际的元素只有三个...第二个:这里先++再解引用拿到c+1的地址,然后--,注意这里不是cp挪位置,而是c里挪位置,所以--之后指向了c的位置,然后解引用拿到ENTER第一个字母的地址,然后+3。

32540

Redis的压缩表,值得了解...

还有一个问题,我们遍历的时候不知道每个元素的大小,无法准确计算出下一个节点的具体位置。实际存储不会出现上图的横线,我们并不知道什么时候当前节点结束,什么时候到了下一个节点。...所以redis添加length属性,用来记录前一个节点的长度。...,节点总数量zllength) #define ZIPLIST_HEADER_SIZE (sizeof(uint32_t)*2+sizeof(uint16_t)) //返回压缩列表最后结尾的字节数...是不是有点逗,定义了却没使用。 因为,这个结构存储实在是太浪费空间了。...,64位机占用了29(int类型5个,每个int占4个字节,char类型1个,每个char占用1个字节,char*类型1个,每个char*占用8个字节,所以总共5*4+1*1+1*8=29个字节)。

1K60
领券