假设在一个32位little endian的机器上运行下面的程序,结果是多少?

2023-11-17

假设在一个32位little endian的机器上运行下面的程序,结果是多少?

假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?

#include <stdio.h>
int main()
{
    long long a = 1, b = 2, c = 3; 
    printf("%d %d %d\n", a, b, c);
    return 0;
}

注意

  1. C,C++中函数的参数是从右往左入栈的,printf属于库函数,调用它的时候遵循这个原则;

  2. 栈的生长方向是从高地址往低地址的;

  3. 小端模式是低位存储在低地址;

  4. %d格式输出的是4个字节大小,而long long不管是32或64位系统都为8个字节。

首先定义三个局部变量a,b,c,在main函数的栈帧中,同类型的变量,谁先定义谁先入栈,a先定义,a先入栈,其次b,再次c。 我们调用内存监视窗口可以看到a,b,c变量的地址,其中a的地址最大,b次之,c最小,因为栈是从高地址写向低地址的,由此可以判断定义变量时的入栈顺序是a,b,c。

image-20230517221856578

运行到printf函数时,参数入栈是从右到左,也就是c先入栈,其次b,再次a。出栈顺序与入栈相反,%d打印每次出栈4个字节,就导致错位。输出1 0 2

image-20230517223140016

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

假设在一个32位little endian的机器上运行下面的程序,结果是多少? 的相关文章

随机推荐