Objective C - 为什么64bit表示不同的变量类型

ben*_*ndu 3 objective-c nsinteger

我听说人们使用NSInteger或CGFloat等类型而不是int或float是因为与64位系统有关.我仍然不明白为什么这是必要的,即使我在我自己的代码中这样做.基本上,为什么64位系统需要更大的整数?

人们还说目前在iOS中没有必要,尽管将来可能需要使用64位iphone等.

Jea*_*ean 5

这一切都在这里解释:

64位转换指南简介

在主要64位更改部分中:

在此输入图像描述

数据类型大小和对齐方式

OS X使用两种数据模型:ILP32(其中整数,长整数和指针是32位数量)和LP64(其中整数是32位量,长整数和指针是64位量).其他类型等同于它们的32位对应物(除了size_t和根据长整数或指针的大小定义的一些其他类型).

虽然几乎所有UNIX和Linux实现都使用LP64,但其他操作系统使用各种数据模型.例如,Windows使用LLP64,其中长长的变量和指针是64位量,而长整数是32位量.相反,Cray使用ILP64,其中int变量也是64位量.

在OS X中,用于数据结构布局的默认对齐方式是自然对齐(下面列出了一些例外).自然对齐意味着结构内的数据元素以对应于底层数据类型的宽度的间隔对齐.例如,一个4字节宽的int变量将在4字节边界上对齐.

还有很多更是你可以在这个文件中读取.写得很好.我强烈推荐给你.