Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 究竟是什么决定了一个整数有多少位_Android_Assembly_Embedded - Fatal编程技术网

Android 究竟是什么决定了一个整数有多少位

Android 究竟是什么决定了一个整数有多少位,android,assembly,embedded,Android,Assembly,Embedded,我正在为我的android设备编写一个应用程序。我正在表演一些本土的音乐。我使用的是android-ndk-r8d/platforms/android-9。 现在在我的C代码中,我声明intj=2 但是有多少字节是j,它是由什么决定的呢?我的android设备的linux内核还是arm芯片?我知道相应的汇编代码是 .data j: .word 2 但这并没有给出这个j将占用多少空间 体系结构和工具链定义了类型的大小,所以是的,它部分是ARM,部分是您用来为它构建的编译器。通常在ARM上,表示

我正在为我的android设备编写一个应用程序。我正在表演一些本土的音乐。我使用的是android-ndk-r8d/platforms/android-9。 现在在我的C代码中,我声明
intj=2
但是有多少字节是
j
,它是由什么决定的呢?我的android设备的linux内核还是arm芯片?我知道相应的汇编代码是

.data
j: .word 2 
但这并没有给出这个
j
将占用多少空间

  • 体系结构和工具链定义了类型的大小,所以是的,它部分是ARM,部分是您用来为它构建的编译器。通常在ARM上,表示32位
    int
    类型

  • .word
    assembly关键字将在汇编程序文档中描述,它将让您知道类型有多大。通常情况下,
    .word
    是ARM的32位类型

  • 体系结构和工具链定义了类型的大小,所以是的,它部分是ARM,部分是您用来为它构建的编译器。通常在ARM上,表示32位
    int
    类型

  • .word
    assembly关键字将在汇编程序文档中描述,它将让您知道类型有多大。通常情况下,
    .word
    是ARM的32位类型


  • 它的可能副本由语言、C或汇编等决定,特别是编译器/汇编程序(并由工具作者选择)。它通常与通用寄存器大小匹配,但并不总是匹配。而且不必从一个编译器匹配到另一个编译器,或者从一个编译器匹配到一个汇编器,也不必从任何东西的一个版本匹配到任何东西。完全取决于工具作者。它的可能副本由语言、C或汇编等确定,特别是编译器/汇编程序(并由工具作者选择)。它通常与通用寄存器大小匹配,但并不总是匹配。而且不必从一个编译器匹配到另一个编译器,或者从一个编译器匹配到一个汇编器,也不必从任何东西的一个版本匹配到任何东西。完全取决于工具作者。不,它完全是编译器,而不是架构。当然,为了方便和高效,编译器配置通常受到架构的启发,但事实上,只要后端以实际硬件为目标,它可以在它提供的编程模型中完全忽略这一点。然而,如果程序员的内存视图要与执行模式相匹配,指针之类的东西的大小就需要与正在使用的寻址模式的大小相匹配。是的,这是真的。在实践中,正如您所说,体系结构往往适合于特定的实现选择。@ChrisStratton而在理论上,没有什么是相同的。以java编译字节码为例。然而,大多数编译器都力求高效。因此,他们希望匹配底层硬件。所以,我认为理论和实践可能不同。第二,编译器通常努力做到ABI兼容,这是体系结构通过效率强制要求的。编译器不必在vm上运行,就可以实现与ALU不同宽度的数据类型。ABI是程序员之间的合同,而不是硬件合同。我在一个使用编译器和ABI的平台上工作过,尽管最有效的硬件操作大小是16位,但它指定了32位int,这样做是为了让它能够方便地运行Linux。@ChrisStratton我提到了一个VM,只是为了指出指针也不必匹配底层的arch。大多数编译器将匹配底层arch。编写“C”标准是为了允许这一点,如果没有其他标准,他们会这样做。当然,您可以创建一个不遵循拱门的系统。您的第一条评论似乎暗示编译器选择什么是完全反复无常的;根本不是架构。不,它完全是编译器,而不是架构。当然,为了方便和高效,编译器配置通常受到架构的启发,但事实上,只要后端以实际硬件为目标,它可以在它提供的编程模型中完全忽略这一点。然而,如果程序员的内存视图要与执行模式相匹配,指针之类的东西的大小就需要与正在使用的寻址模式的大小相匹配。是的,这是真的。在实践中,正如您所说,体系结构往往适合于特定的实现选择。@ChrisStratton而在理论上,没有什么是相同的。以java编译字节码为例。然而,大多数编译器都力求高效。因此,他们希望匹配底层硬件。所以,我认为理论和实践可能不同。第二,编译器通常努力做到ABI兼容,这是体系结构通过效率强制要求的。编译器不必在vm上运行,就可以实现与ALU不同宽度的数据类型。ABI是程序员之间的合同,而不是硬件合同。我在一个使用编译器和ABI的平台上工作过,尽管最有效的硬件操作大小是16位,但它指定了32位int,这样做是为了让它能够方便地运行Linux。@ChrisStratton我提到了一个VM,只是为了指出指针也不必匹配底层的arch。大多数编译器将匹配底层arch。编写“C”标准是为了允许这一点,如果没有其他标准,他们会这样做。当然,您可以创建一个不遵循拱门的系统。您的第一条评论似乎暗示编译器选择什么是完全反复无常的;也就是说,根本不是建筑。