• convert app to 64-bit for ios7


    convert app to 64-bit for ios7

    https://developer.apple.com/library/ios/documentation/General/Conceptual/CocoaTouch64BitGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40013501-CH1-SW1

     

    Table 1-1  Size and alignment of integer data types in OS X and iOS

    Integer data type

    ILP32 size

    ILP32 alignment

    LP64 size

    LP64 alignment

    char

    1 byte

    1 byte

    1 byte

    1 byte

    BOOLbool

    1 byte

    1 byte

    1 byte

    1 byte

    short

    2 bytes

    2 bytes

    2 bytes

    2 bytes

    int

    4 bytes

    4 bytes

    4 bytes

    4 bytes

    long

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    long long

    8 bytes

    4 bytes

    8 bytes

    8 bytes

    pointer

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    size_t

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    NSInteger

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    CFIndex

    4 bytes

    4 bytes

    8 bytes

    8 bytes

    fpos_t

    8 bytes

    4 bytes

    8 bytes

    8 bytes

    off_t

    8 bytes

    4 bytes

    8 bytes

    8 bytes

     

     

    Table 1-2  Size of floating-point data types in OS X and iOS

    Floating-point type

    ILP32 size

    LP64 size

    float

    4 bytes

    4 bytes

    double

    8 bytes

    8 bytes

    CGFloat

    4 bytes

    8 bytes

     

    数据类型改变:

    指针类型由4字节改为8字节;

    long,size_t,NSInteger,CFIndex 变为8字节;

    CGFloat 由4字节变为8字节。

     

    Summary

    At a high level, to make your code 64-bit clean, you must do the following:

    • Avoid assigning 64-bit long integers to 32-bit integers.

    • Avoid assigning 64-bit pointers to 32-bit integers.

    • Avoid pointer and long integer truncation during arithmetic operations (or other arithmetic problems caused by the change in integer types).

    • Fix alignment issues caused by changes in data type sizes. (内存对齐问题)

    • Ensure that memory structures that are shared between the 32-bit and 64-bit runtimes share a similar layout.

    • Rewrite any assembly language code so that your code uses the new 64-bit opcodes and runtime.

    • Avoid casting variadic functions to functions that take a fixed number of parameters, or vice versa.(变参函数 和 定参函数之间的转换)

     

    Common Memory Usage Problems

    1  Foundation Objects May Be Expensive for Small Payloads    使用NSDictionary、NSArray等对象保存少量数据时耗费更多的内存。

    2 Choose a Compact Data Representation   使用紧凑的数据结构,少一些变量(一些变量可以由某个变量计算得出)

    3 Pack Data Structures  注意内存对齐问题,编译器可能会添加额外的补齐空间。

    4 Use Fewer Pointers 64-bit 中指针占用更多的内存空间。

    5 Memory Allocations Are Padded to Preserve Alignment   

    When allocating memory for C structs, it may be more efficient for you to allocate a few large blocks of memory instead of allocating memory for each individual struct.

    6 Cache Only When You Need To

     

    Converting Your App to a 64-Bit Binary

    1  Do Not Cast Pointers to Integers

     

    2  Use Data Types Consistently    

    使用数据类型要保持一致。

    枚举也是有类型的。

    NSIntger,CGFloat 已经变成64位了,与int、float进行计算时要注意。

     

    3  Be Careful When Performing Integer Computations  

    注意有符号和无符号数:有符号数和无符号数进行计算得到的结果是符号的;

    1. Unsigned values are zero extended (not sign extended) when promoted to a larger type.(无符号数 转换成更大的类型时 用0补齐额外的位数)

    2. Signed values are always sign extended when promoted to a larger type, even if the resulting type is unsigned.(有符号数 转换成更大的类型时 用符号位补齐额外的位数)

    3. Constants (unless modified by a suffix, such as 0x8L) are treated as the smallest size that will hold the value. Numbers written in hexadecimal may be treated by the compiler as intlong, and long long types and may be either signed or unsigned types. Decimal numbers are always treated as signed types.(常量的对待,十进制为有符号数)

    4. The sum of a signed value and an unsigned value of the same size is an unsigned value.

     

    位操作Bits and Bitmasks:

    • If you want the mask value to contain zeros in the upper 32 bits in the 64-bit runtime, the usual fixed-width mask works as expected, because it will be extended in an unsigned fashion to a 64-bit quantity.

    • If you want the mask value to contain ones in the upper bits, write the mask as the bitwise inverse of its inverse

     

    4 Create Data Structures with Fixed Size and Alignment

     使用明确长度的int类型:

    able 2-1  C99 explicit integer types

    Type

    Range

    int8_t

    -128 to 127

    int16_t

    -32,768 to 32,767

    int32_t

    -2,147,483,648 to 2,147,483,647

    int64_t

    -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

    uint8_t

    0 to 255

    uint16_t

    0 to 65,535

    uint32_t

    0 to 4,294,967,295

    uint64_t

    0 to 18,446,744,073,709,551,615

     

    5 Allocate Memory Using sizeof

    6 Update Format Strings to Support Both Runtimes

    7  Take Care with Functions and Function Pointers

    8  Use the Built-in Synchronization Primitives

    9  Never Hard-Code the Virtual Memory Page Size

    10 Go Position Independent

    11 Don’t Forget your 32-bit Version

    12 Make Your App Run Well in the 32-Bit Runtime

     

     

  • 相关阅读:
    JavaScript(ASP)常用代码
    用JavaScript + jMail发邮件
    SQL语句导入导出大全
    C#编程方式执行包的任务
    匹配版本号
    c# web 页面帮定数据的 7中方式
    好书
    奇怪的异步调用,那位高手能帮忙看一下?
    vb6 调用c# 服务
    易犯的错误忘了初始化对象
  • 原文地址:https://www.cnblogs.com/zsw-1993/p/4879741.html
Copyright © 2020-2023  润新知