RV64函数调用流程分析

RV64函数调用流程分析

  • 1 RV64 函数调用实例
  • 2 对应代码的分析
    • 2.1 main函数及其对应的汇编程序
      • 2.1.1 main的C代码实现
      • 2.1.2 main函数对应汇编及其分析
      • 2.1.3 执行完成之后栈的存放情况
    • 2.2 test_fun_a函数及其对应的汇编程序
      • 2.2.1 test_fun_a函数的C实现
      • 2.2.2 test_fun_a函数对应汇编及其分析
      • 2.2.3 执行完成之后栈帧的使用情况
    • 2.3 test_fun_b函数及其对应的汇编程序
      • 2.3.1 test_func_b函数的C实现
      • 2.3.2 test_fun_b函数对应汇编及其分析
      • 2.3.3 执行完成之后栈帧的使用情况
  • 3 编译和反汇编的命令
    • 3.1 编译的命令
    • 3.2 反汇编的命令

[RV64 程序调用标准]

1 RV64 函数调用实例

下图是介绍一个简单函数调用的示例,在该示例中简单介绍了栈的使用。
在这里插入图片描述

2 对应代码的分析

2.1 main函数及其对应的汇编程序

2.1.1 main的C代码实现

int main(void)
{long a = 1;                                                                             long b = 2;printf("The current function is %s a:%ld b:%ld\r\n", __func__, a, b); test_fun_a(a, b, 0, 1); a = a + b;b = a + b;return 0;
}

2.1.2 main函数对应汇编及其分析

  • 000000000000071e <main>:
  • 71e: 1101 addi sp,sp,-32为函数分配32字节的栈空间。
  • 720: ec06 sd ra,24(sp)将寄存器 ra 的值存储到当前sp + 24的栈位置。
  • 722: e822 sd s0,16(sp)将寄存器 s0(栈帧指针寄存器) 的值存储到sp+ 16的栈位置。
  • 724: 1000 addi s0,sp,32将栈指针的值加上32,并将结果存储在寄存器 s0 中,即将s0指向当前函数的栈底。
  • 726: 4785 li a5,1将局部变量a的值加载到a5寄存器中
  • 728: fef43023 sd a5,-32(s0)将局部变量a的值保存到sp偏移0的位置,(fp - 32)的栈位置
  • 72c: 4789 li a5,2将局部变量b的值加载到a5寄存器中
  • 72e: fef43423 sd a5,-24(s0)将局部变量b的值保存到sp + 8,即(fp - 24)的栈位置处。
  • 732: fe843683 ld a3,-24(s0)从栈中取出局部变量b的值,放到a3寄存器中
  • 736: fe043603 ld a2,-32(s0)从栈中取出局部变量a的值,放到a2寄存器中
  • 73a: 00000597 auipc a1,0x0
  • 73e: 15658593 addi a1,a1,342 # 890 <__func__.2104>
  • 742: 00000517 auipc a0,0x0
  • 746: 0fe50513 addi a0,a0,254 # 840 <__libc_csu_fini+0x62>这些指令用于设置 a1 和 a0 寄存器的值。通过使用 auipc 指令和相对偏移量,将一个值加载到寄存器中。
  • 74a: e07ff0ef jal ra,550 <printf@plt>跳转并链接到地址为550的函数(这里是 printf)。 jal 指令将返回地址(保存在 ra 寄存器中)。
  • 74e: 4685 li a3,1将立即数1加载到a3寄存器中,作为调用test_fun_a函数的第4个参数
  • 750: 4601 li a2,0将立即数0保存到a2寄存器中,作为调用test_fun_a函数的第3个参数
  • 752: fe843583 ld a1,-24(s0)从栈中取出局部变量b的值放到a1寄存器中,作为调用test_fun_a函数的第2个参数
  • 756: fe043503 ld a0,-32(s0)从栈中取出局部变量a的值存放到a0寄存器中,作为调用test_fun_a函数的第1个参数
  • 75a: f43ff0ef jal ra,69c <test_fun_a>将返回值保存到ra寄存器中,调用test_fun_a函数,a0 ~ a4是调用test_fun_a函数的四个参数。
  • 75e: fe043703 ld a4,-32(s0)从栈中加载局部变量b的值到a4寄存器中
  • 762: fe843783 ld a5,-24(s0)从栈中加载局部变量a的值到a5寄存器中
  • 766: 97ba add a5,a5,a4a = a + b,将计算的值保存到a5寄存器中
  • 768: fef43023 sd a5,-32(s0)将a5寄存器的值保存到局部变量a的栈位置处,即更新局部变量a的值
  • 76c: fe843703 ld a4,-24(s0)从栈中加载局部变量b的值到a4寄存器中
  • 770: fe043783 ld a5,-32(s0)从栈中加载局部变量a的值到a5寄存器中
  • 774: 97ba add a5,a5,a4将a + b的值放到a5寄存器中
  • 776: fef43423 sd a5,-24(s0)将a + b的值存储在局部变量b的栈内存中,即更新局部变量a的值
  • 77a: 4781 li a5,0加载立即数0到a5寄存器中
  • 77c: 853e mv a0,a5将a5寄存器的值复制给a0寄存器,即给a0寄存器赋值为0,a0用来保存函数的返回值
  • 77e: 60e2 ld ra,24(sp)恢复ra寄存器的值
  • 780: 6442 ld s0,16(sp)恢复s0(FP)寄存器的值
  • 782: 6105 addi sp,sp,32恢复栈
  • 784: 8082 ret返回调用main的函数中
000000000000071e <main>:71e:   1101                    addi    sp,sp,-32720:   ec06                    sd      ra,24(sp)722:   e822                    sd      s0,16(sp)724:   1000                    addi    s0,sp,32726:   4785                    li      a5,1728:   fef43023                sd      a5,-32(s0)72c:   4789                    li      a5,272e:   fef43423                sd      a5,-24(s0)732:   fe843683                ld      a3,-24(s0)736:   fe043603                ld      a2,-32(s0)73a:   00000597                auipc   a1,0x073e:   15658593                addi    a1,a1,342 # 890 <__func__.2104>                                                                                                                                    742:   00000517                auipc   a0,0x0746:   0fe50513                addi    a0,a0,254 # 840 <__libc_csu_fini+0x62>74a:   e07ff0ef                jal     ra,550 <printf@plt>74e:   4685                    li      a3,1750:   4601                    li      a2,0752:   fe843583                ld      a1,-24(s0)756:   fe043503                ld      a0,-32(s0)75a:   f43ff0ef                jal     ra,69c <test_fun_a>75e:   fe043703                ld      a4,-32(s0)762:   fe843783                ld      a5,-24(s0)766:   97ba                    add     a5,a5,a4768:   fef43023                sd      a5,-32(s0)76c:   fe843703                ld      a4,-24(s0)770:   fe043783                ld      a5,-32(s0)774:   97ba                    add     a5,a5,a4776:   fef43423                sd      a5,-24(s0)77a:   4781                    li      a5,077c:   853e                    mv      a0,a577e:   60e2                    ld      ra,24(sp)780:   6442                    ld      s0,16(sp)782:   6105                    addi    sp,sp,32784:   8082                    ret

2.1.3 执行完成之后栈的存放情况

在这里插入图片描述

2.2 test_fun_a函数及其对应的汇编程序

2.2.1 test_fun_a函数的C实现

void test_fun_a(long m, long n, long x, long y)
{long b = 2;long c = 3;printf("The current function is %s b:%ld c:%ld\r\n", __func__, b, c); test_fun_b(b, c, 0, 2); b = b + c + m;c = b + c + n;
}

2.2.2 test_fun_a函数对应汇编及其分析

  • 000000000000069c <test_fun_a>:
  • 69c: 7139 addi sp,sp,-64为test_fun_a函数开辟一块64Byte的栈空间
  • 69e: fc06 sd ra,56(sp)将ra加载到sp + 56的栈内存中
  • 6a0: f822 sd s0,48(sp)将s0加载到sp + 48的栈内存中
  • 6a2: 0080 addi s0,sp,64将栈底保存到s0(FP)寄存器中
  • 6a4: fca43c23 sd a0,-40(s0)将第一个参数加载到fp - 40的栈内存中,即sp + 24的栈中,
  • 6a8: fcb43823 sd a1,-48(s0)将第二个参数加载到fp - 48的栈内存中,即sp + 16的栈中,
  • 6ac: fcc43423 sd a2,-56(s0)将第三个参数加载到fp - 56的栈内存中,即sp + 8的栈中,
  • 6b0: fcd43023 sd a3,-64(s0)将第四个参数加载到fp - 64的栈内存中,即sp + 0的栈中,
  • 6b4: 4789 li a5,2将局部变量b的值2加载到a5寄存器中
  • 6b6: fef43023 sd a5,-32(s0)将局部变量b的值存储到fp - 32的栈内存中,即sp + 32的栈中
  • 6ba: 478d li a5,3将局部变量c的值加载到a5寄存器中
  • 6bc: fef43423 sd a5,-24(s0)将局部变量c的值存储到fp - 24的栈内存中,即sp + 40的栈中
  • 6c0: fe843683 ld a3,-24(s0)从栈中取出局部变量c的值取出放到a3寄存器中
  • 6c4: fe043603 ld a2,-32(s0)从栈中取出局部变量b的值取出放到局部变量a2中
  • 6c8: 00000597 auipc a1,0x0
  • 6cc: 1b858593 addi a1,a1,440 # 880 <__func__.2098>
  • 6d0: 00000517 auipc a0,0x0
  • 6d4: 14050513 addi a0,a0,320 # 810 <__libc_csu_fini+0x32>
  • 6d8: e79ff0ef jal ra,550 <printf@plt>将返回值保存到ra寄存器中,调用printf
  • 6dc: 4689 li a3,2加载立即数2到a3中
  • 6de: 4601 li a2,0加载立即数0到a2中
  • 6e0: fe843583 ld a1,-24(s0)从栈fp - 24的栈中取出局部变量c的值到a1寄存器中
  • 6e4: fe043503 ld a0,-32(s0)从栈fp - 32的栈内存取出局部变量b的值到a0寄存器中
  • 6e8: f43ff0ef jal ra,62a <test_fun_b>将返回值保存到ra寄存器中,调用test_fun_b函数
  • 6ec: fe043703 ld a4,-32(s0)从fp - 32栈内存中取出局部变量b的值到a4寄存器中
  • 6f0: fe843783 ld a5,-24(s0)从fp - 24栈内存中取出局部变量c的值到a5寄存器中
  • 6f4: 97ba add a5,a5,a4 b + c将计算的值更到到a5寄存器中
  • 6f6: fd843703 ld a4,-40(s0)从fp - 40的栈中取出第一个参数m的值到a4寄存器中
  • 6fa: 97ba add a5,a5,a4 b + c + m的值保存到a5寄存器中
  • 6fc: fef43023 sd a5,-32(s0)存储b + c + m的值到局部变量b的栈内存中
  • 700: fe043703 ld a4,-32(s0)从栈中取出局部变量b的值到a4寄存器中
  • 704: fe843783 ld a5,-24(s0)从栈中取出局部变量c的值到a5寄存器中
  • 708: 97ba add a5,a5,a4b + c的值保存到a5寄存器中
  • 70a: fd043703 ld a4,-48(s0)从栈中取出第二个参数n的值到a4寄存器中
  • 70e: 97ba add a5,a5,a4 b + c + n 的值保存到a5寄存器中
  • 710: fef43423 sd a5,-24(s0)将b + c + n的值保存到局部变量c的栈内存中
  • 714: 0001 nop
  • 716: 70e2 ld ra,56(sp)从栈中恢复ra的值
  • 718: 7442 ld s0,48(sp)从栈中恢复s0(FP)的值
  • 71a: 6121 addi sp,sp,64恢复sp寄存器
  • 71c: 8082 ret返回main函数调用test_fun_a的下一条指令处。
000000000000069c <test_fun_a>:69c:   7139                    addi    sp,sp,-6469e:   fc06                    sd      ra,56(sp)6a0:   f822                    sd      s0,48(sp)6a2:   0080                    addi    s0,sp,646a4:   fca43c23                sd      a0,-40(s0)6a8:   fcb43823                sd      a1,-48(s0)6ac:   fcc43423                sd      a2,-56(s0)6b0:   fcd43023                sd      a3,-64(s0)6b4:   4789                    li      a5,26b6:   fef43023                sd      a5,-32(s0)6ba:   478d                    li      a5,36bc:   fef43423                sd      a5,-24(s0)6c0:   fe843683                ld      a3,-24(s0)6c4:   fe043603                ld      a2,-32(s0)6c8:   00000597                auipc   a1,0x06cc:   1b858593                addi    a1,a1,440 # 880 <__func__.2098>6d0:   00000517                auipc   a0,0x06d4:   14050513                addi    a0,a0,320 # 810 <__libc_csu_fini+0x32>6d8:   e79ff0ef                jal     ra,550 <printf@plt>6dc:   4689                    li      a3,26de:   4601                    li      a2,06e0:   fe843583                ld      a1,-24(s0)6e4:   fe043503                ld      a0,-32(s0)6e8:   f43ff0ef                jal     ra,62a <test_fun_b>6ec:   fe043703                ld      a4,-32(s0)6f0:   fe843783                ld      a5,-24(s0)6f4:   97ba                    add     a5,a5,a46f6:   fd843703                ld      a4,-40(s0)                                                                                                                                                         6fa:   97ba                    add     a5,a5,a46fc:   fef43023                sd      a5,-32(s0)700:   fe043703                ld      a4,-32(s0)704:   fe843783                ld      a5,-24(s0)708:   97ba                    add     a5,a5,a470a:   fd043703                ld      a4,-48(s0)70e:   97ba                    add     a5,a5,a4710:   fef43423                sd      a5,-24(s0)714:   0001                    nop716:   70e2                    ld      ra,56(sp)718:   7442                    ld      s0,48(sp)71a:   6121                    addi    sp,sp,6471c:   8082                    ret

2.2.3 执行完成之后栈帧的使用情况

在这里插入图片描述

2.3 test_fun_b函数及其对应的汇编程序

2.3.1 test_func_b函数的C实现

void test_fun_b(long m, long n, long x, long y)
{long c = 3;long d = 4;printf("The current function is %s c:%ld d:%ld\r\n", __func__, c, d); c = c + d + m;d = c + d + n;
}

2.3.2 test_fun_b函数对应汇编及其分析

  • 000000000000062a <test_fun_b>:
  • 62a: 7139 addi sp,sp,-64为test_func_b开辟64Byte的栈空间
  • 62c: fc06 sd ra,56(sp)将ra保存到sp + 56栈内存中
  • 62e: f822 sd s0,48(sp)将s0(FP)保存到sp + 48栈内存中
  • 630: 0080 addi s0,sp,64将栈底的值保存到s0(FP)寄存器中
  • 632: fca43c23 sd a0,-40(s0)存储第一个参数到fp - 40栈内存中
  • 636: fcb43823 sd a1,-48(s0)存储第二个参数到fp - 48栈内存中
  • 63a: fcc43423 sd a2,-56(s0)存储第三个参数到fp - 56栈内存中
  • 63e: fcd43023 sd a3,-64(s0)存储第四个参数到fp - 64栈内存中
  • 642: 478d li a5,3加载局部变量c的值到a5寄存器中
  • 644: fef43023 sd a5,-32(s0)将局部变量c的值存储到fp - 32栈内存中
  • 648: 4791 li a5,4加载局部变量d的值到a5寄存器中
  • 64a: fef43423 sd a5,-24(s0)存储局部变量d的值到fp - 24栈内存中
  • 64e: fe843683 ld a3,-24(s0)从fp - 24的栈内存中取出局部变量d的值到a3寄存器中
  • 652: fe043603 ld a2,-32(s0)从fp - 32的栈内存中取出局部变量c的值到a2寄存器中
  • 656: 00000597 auipc a1,0x0
  • 65a: 21a58593 addi a1,a1,538 # 870 <__func__.2089>
  • 65e: 00000517 auipc a0,0x0
  • 662: 18250513 addi a0,a0,386 # 7e0 <__libc_csu_fini+0x2>
  • 666: eebff0ef jal ra,550 <printf@plt> 将返回值保存到ra寄存中其,调用printf函数
  • 66a: fe043703 ld a4,-32(s0)从栈fp - 32中取出局部变量c的值到a4寄存器中
  • 66e: fe843783 ld a5,-24(s0)从栈fp - 24中取出局部变量d的值到a5寄存器中
  • 672: 97ba add a5,a5,a4将b + c值保存到a5Jicunqi zhong
  • 674: fd843703 ld a4,-40(s0)从栈中取出第一个参数m的值到a4寄存器中
  • 678: 97ba add a5,a5,a4将b + c + m的值保存到a5寄存器中
  • 67a: fef43023 sd a5,-32(s0)存储b + c + m 的值到栈fp - 32栈内存中,即局部变量c的栈内存位置处
  • 67e: fe043703 ld a4,-32(s0)从栈中取出局部变量c的值到a4寄存器中
  • 682: fe843783 ld a5,-24(s0)从栈中取出局部变量d的值到a5寄存器中
  • 686: 97ba add a5,a5,a4
  • 688: fd043703 ld a4,-48(s0)从栈中取出第二个参数n的值到a4寄存器中
  • 68c: 97ba add a5,a5,a4将c + d + n的值到a5寄存器中
  • 68e: fef43423 sd a5,-24(s0)将c + d + n的值存储到fp - 24的栈内存中
  • 692: 0001 nop
  • 694: 70e2 ld ra,56(sp)恢复ra寄存器的值
  • 696: 7442 ld s0,48(sp)恢复s0(FP)寄存器的值
  • 698: 6121 addi sp,sp,64恢复sp寄存器的值
  • 69a: 8082 ret返回ra寄存器的地址
000000000000062a <test_fun_b>:62a:   7139                    addi    sp,sp,-6462c:   fc06                    sd      ra,56(sp)62e:   f822                    sd      s0,48(sp)630:   0080                    addi    s0,sp,64632:   fca43c23                sd      a0,-40(s0)636:   fcb43823                sd      a1,-48(s0)63a:   fcc43423                sd      a2,-56(s0)63e:   fcd43023                sd      a3,-64(s0)642:   478d                    li      a5,3644:   fef43023                sd      a5,-32(s0)648:   4791                    li      a5,464a:   fef43423                sd      a5,-24(s0)64e:   fe843683                ld      a3,-24(s0)                                                                                                                                                         652:   fe043603                ld      a2,-32(s0)656:   00000597                auipc   a1,0x065a:   21a58593                addi    a1,a1,538 # 870 <__func__.2089>65e:   00000517                auipc   a0,0x0662:   18250513                addi    a0,a0,386 # 7e0 <__libc_csu_fini+0x2>666:   eebff0ef                jal     ra,550 <printf@plt>66a:   fe043703                ld      a4,-32(s0)66e:   fe843783                ld      a5,-24(s0)672:   97ba                    add     a5,a5,a4674:   fd843703                ld      a4,-40(s0)678:   97ba                    add     a5,a5,a467a:   fef43023                sd      a5,-32(s0)67e:   fe043703                ld      a4,-32(s0)682:   fe843783                ld      a5,-24(s0)686:   97ba                    add     a5,a5,a4688:   fd043703                ld      a4,-48(s0)68c:   97ba                    add     a5,a5,a468e:   fef43423                sd      a5,-24(s0)692:   0001                    nop694:   70e2                    ld      ra,56(sp)696:   7442                    ld      s0,48(sp)698:   6121                    addi    sp,sp,6469a:   8082                    ret

2.3.3 执行完成之后栈帧的使用情况

在这里插入图片描述

3 编译和反汇编的命令

3.1 编译的命令

需要注意的是如果不加-Wl,--no-as-needed编译选项,则在反汇编的时候无法查看到标准库的接口,不太容易理解对应的汇编程序。

riscv64-linux-gnu-gcc -Wl,--no-as-needed main.c -o rv_test

3.2 反汇编的命令

riscv64-linux-gnu-objdump -S -d rv_test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/54975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flask狼书笔记 | 04_表单

文章目录 4 表单4.1 HTML表单4.2 使用Flask-WTF4.3 处理表单数据4.4 表单进阶实践小记 4 表单 表单是和用户交互最常见的方式之一&#xff0c;本章涉及的Python包由WTForms、Flask-WTF、Flask-CKEditor。&#xff08;p104&#xff09; 4.1 HTML表单 通过<form>标签创建…

2023国赛数学建模E题思路模型代码 高教社杯

本次比赛我们将会全程更新思路模型及代码&#xff0c;大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…

【C/C++】父类指针指向子类对象 | 隐藏

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

ICCV 2023 Oral | 从无约束图像集合中生成新视角的交叉光线神经辐射场

文章链接&#xff1a;https://arxiv.org/abs/2307.08093 代码链接&#xff1a;https://github.com/YifYang993/CR-NeRF-PyTorch.git 01. 介绍 本工作旨在通过从不受限制的图像集合&#xff08;例如从互联网中爬取的图像&#xff09;中合成新视角图片&#xff0c;从而提供3D沉浸…

5.网络原理之初识

文章目录 1.网络发展史1.1独立模式1.2网络互连1.3局域网LAN1.3.1基于网线直连1.3.2基于集线器组建1.3.3基于交换机组建1.3.4基于交换机和路由器组建1.3.4.1路由器和交换机区别 1.4广域网WAN 2.网络通信基础2.1IP地址2.2端口号2.3认识协议2.4五元组2.5 协议分层2.5.1 分层的作用…

DTC状态变化例子 4

例子1&#xff1a; 此示例概述了两个操作周期排放相关的 OBD DTC 中 DTC 状态位的操作。该图显示了两个操作周期排放相关的 OBD DTC 的处理。该处理也可应用于非排放相关的 OBD DTC&#xff0c;此处显示仅供一般参考。 0 接收到清除诊断信息 → DTC 状态字节初始化。 1, 2 相关…

(动态规划) 剑指 Offer 48. 最长不含重复字符的子字符串 ——【Leetcode每日一题】

❓剑指 Offer 48. 最长不含重复字符的子字符串 难度&#xff1a;中等 请从字符串中找出一个最长的不包含重复字符的子字符串&#xff0c;计算该最长子字符串的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为…

JVM7:垃圾回收是什么?从运行时数据区看垃圾回收到底回收哪块区域?垃圾回收如何去回收?垃圾回收策略,引用计数算法及循环引用问题,可达性分析算法

垃圾回收是什么&#xff1f;从运行时数据区看垃圾回收到底回收哪块区域&#xff1f; 垃圾回收如何去回收&#xff1f; 垃圾回收策略 引用计数算法及循环引用问题 可达性分析算法 垃圾回收是什么&#xff1f;从运行时数据区看垃圾回收到底回收哪块区域&#xff1f;垃圾回收如何去…

ctfshow web入门 web103-web107

1.web103 和102一样 payload: v2115044383959474e6864434171594473&v3php://filter/writeconvert.base64-decode/resource1.php post v1hex2bin2.web104 值只要一样就可以了 payload: v21 post v113.web105 考查的是$$变量覆盖,die可以带出数据,输出一条消息&#xf…

C# winform加载yolov8模型测试(附例程)

第一步&#xff1a;在NuGet中下载Yolov8.Net 第二步&#xff1a;引用 using Yolov8Net; 第三步&#xff1a;加载模型 private IPredictor yolov8 YoloV8Predictor.Create("D:\\0MyWork\\Learn\\vs2022\\yolov_onnx\\best.onnx", mylabel); 第四步&#xff1a;图…

c++存取dat数据

众所周知&#xff0c;dat是一个类似加密的二进制格式文件&#xff0c;很多人喜欢将游戏数据保存在dat文件中&#xff0c;只有知道你的存放格式&#xff0c;才能够将数据破解出来&#xff0c;因而研究了dat文件的存取方式。其实就是c文件的操作&#xff0c;只不过是在取的时候需…

0基础入门C++之类和对象下篇

目录 1.再谈构造函数1.1构造函数赋值1.2初始化列表1.3explicit关键字 2.static成员2.1概念2.1静态成员变量2.2静态成员函数2.3特性 3.匿名对象4.友元函数4.1友元函数4.2友元类 5.内部类6.再次理解类和对象 1.再谈构造函数 首先我们先来回忆一下构造函数&#xff1a; 构造函数是…

华为OD-整数对最小和

题目描述 给定两个整数数组array1、array2&#xff0c;数组元素按升序排列。假设从array1、array2中分别取出一个元素可构成一对元素&#xff0c;现在需要取出k对元素&#xff0c;并对取出的所有元素求和&#xff0c;计算和的最小值 代码实现 # coding:utf-8 class Solution:…

【工具使用】Git的使用

dev代表开发版 1. git clone 命令 通过 git add <name> 对文件进行跟踪&#xff0c;把<name>加入到暂存区 git commit -m XXXXXXX 提交修改并补充XXXXX作为注释 “暂存”状态&#xff1a;出现了一些修改&#xff0c;但是还没有提交 对于Java来说&#xff0c;.cl…

goland 中的调试器 -- Evaluate

今天一个好朋友 找到我&#xff0c;问我关于goland中Evaluate 小计算器的使用方式&#xff0c;说实话&#xff0c;我在此之前也没用过这个东西&#xff0c;然后我就找一些相关文档&#xff0c;但是这类文档少的可怜&#xff0c;所以我就稍微研究一下&#xff0c;找找材料&#…

数组名和函数名是指针?指针和引用底层一样?

在2023/8/26日晚上&#xff0c;我看到一个所谓“典”的视频&#xff0c;一开始还没太在意&#xff0c;后面想了想发现我貌似也一直犯了以下的错误&#xff0c;而错误的原因在于我在新手阶段学习C/C并不是查阅文档扎好脚步学习的&#xff0c;而是被铺天盖地的新手学习基础教程里…

Java“牵手”天猫商品列表数据,关键词搜索天猫商品数据接口,天猫API申请指南

天猫商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取天猫商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问天猫商城的网页来获取商品详情信息。以下是两种常用方法的介绍&…

Vue2向Vue3过度Vuex核心概念actions

目录 1 核心概念 - actions1.定义actions2.组件中通过dispatch调用 2 辅助函数 -mapActions 1 核心概念 - actions state是存放数据的&#xff0c;mutations是同步更新数据 (便于监测数据的变化, 更新视图等, 方便于调试工具查看变化)&#xff0c; actions则负责进行异步操作 说…

云南森林火灾vr消防模拟安全演练系统训练消防员火灾和事故的适应和应对能力

据统计,每一场破坏性地震发生后,会引发次生的灾害,而火灾是其中之一。导致火灾的原因,推测是地震时使供电线路短路,引燃易燃物,火灾就随即发生。所以,在日常生活中,定期的消防演练还是非常必要的, VR消防&#xff0c;是VR公司深圳华锐视点利用VR虚拟现实技术&#xff0c;将VR和…

Unity项目如何上传Gitee仓库

前言 最近Unity项目比较多&#xff0c;我都是把Unity项目上传到Gitee中去&#xff0c;GitHub的话我用的少&#xff0c;可能我还是更喜欢Gitee吧&#xff0c;毕竟Gitee仓库用起来更加方便&#xff0c;注意Unity项目上传时最佳的方式是把 Asste ProjectSetting 两个文件夹上传上…