zoukankan      html  css  js  c++  java
  • 函数调用时的参数传递和栈帧结构问题

    如下C++程序

    int i=0x22222222; 
    char szTest[]=”aaaa”;  //a的ascii码为0x61 
    func(I, szTest);    //函数原型为void func(int a,char *sz); 

    请问刚进入func函数时,参数在栈中的形式可能为 (左侧为地址,右侧为数据)

    A. 
    0x0013FCF0  0x61616161   
    0x0013FCF4  0x22222222   
    0x0013FCF8  0x00000000
    B. 
    0x0013FCF0  0x22222222 
    0x0013FCF4  0x0013FCF8 
    0x0013FCF8  0x61616161
    C. 
    0x0013FCF0  0x22222222   
    0x0013FCF4  0x61616161   
    0x0013FCF8  0x00000000
    D. 
    0x0013FCF0  0x0013FCF8 //函数地址
    0x0013FCF4  0x22222222 //左边参数
    0x0013FCF8  0x61616161 //右边参数

    答案是D。

    (1)对于x86系统,栈的增长方向是从高地址到低地址
    (2)函数调用时,首先参数压栈,参数的入栈顺序是从右向左;最后压入函数地址
    (3)函数调用入栈顺序依次是: 右边参数-->左边参数-->函数返回地址

    栈的增长方向即栈中元素增加的方向,从高地址向着低地址元素不断增加,则栈底在高地址处,栈顶在低地址处!!!

     
  • 相关阅读:
    NTP服务器搭建
    Linux安装MongoDB 4.4.2
    CentOS安装Zookeeper 3.6.2
    CentOS安装Redis 6.0.9
    MacBook Home End
    SLES Install
    cucumber soapui test web services
    S/4 HANA Solution Manager
    Linux下创建新用户
    su with hyphen and without
  • 原文地址:https://www.cnblogs.com/wft1990/p/6737551.html
Copyright © 2011-2022 走看看