X86-64 CPU架构以及64 位GCC对程序编译处理的一些变化
来源:互联网 发布:sql distinct count 编辑:程序博客网 时间:2024/05/22 01:52
X86-64 CPU架构以及64 位GCC对程序编译处理的一些变化
作者:JochenZou
转载请注明出处:http://blog.csdn.net/youkawa/article/details/45458921
- 通用寄存器全部扩展到了64位,寄存器名称前面由R开头,如RAX, RBX, RCX, RDX, RSI和RDI;
- 指令指针(Instruction pointer)、基址指针(base pointer)以及堆栈指针(stack
pointer)也全部扩展到了64位,这些专用寄存器分别称为RIP,RBP,RSP; - 添加了8个通用寄存器R8~R15;
- 指针长度为64位即8-bytes长度;
- 涉及到栈操作的Push/pop指令入栈出栈操作数的长度为64位即8-bytes长度;
- 函数参数主要依靠6个寄存器来传递,当寄存器不够用时才把参数压入栈中存储。按存储参数的顺序(从左到右)依次为RDI, RSI, RDX, RCX, R8, R9;
- 最大canonical address大小为0x00007FFFFFFFFFFF.
- GCC对函数局部变量分配的空间大小为16字节的倍数,例如分配char a[15],则回从[RBP-0X10]地址开始存放局部变量,若定义char a[17],则从[RBP-0X20]地址开始存放局部变量;
- GCC对函数局部变量分配空间有以下几种方式:
(1)当函数内部有调用其他外部函数(有CALL指令)的时候,使用SUB RSP , 0xXX指令分配栈空间, 然后使用MOV [RBP-X], 0xXX的形式入栈,如果没有对局部变量初始化,而且函数后面也没有使用这一变量,则GCC不会为其开辟空间。
(2)当函数内部没有调用其他外部函数时,在进行prologue操作(即push rbp; mov rbp, rsp)之后,不会有SUB RSP , 0xXX指令开辟栈空间的操作,而是直接使用MOV QWORD PTR [RBP-0xXX], 0xXX的方式直接使用栈空间;
(3)当函数内部静态调用lib库函数的时候,因为此时被调用函数内联到了主调函数里面,所以不会有CALL指令,仍然按(2)的方式操作。
0 0
- X86-64 CPU架构以及64 位GCC对程序编译处理的一些变化
- ubuntu 64上的GCC如何编译32位程序
- GCC 64位系统中编译32位程序
- gcc编译32位(64位)程序
- linux GCC编译错误:CPU you selected does not support x86-64 instruction set
- 为什么gcc在64位Solaris上编译出来的程序默认是32位的?
- centos/ubutu x86-64 编译gcc-4.6.2 的经历
- VS2008中编译64位程序以及遇到的问题
- VS2008中编译64位程序以及遇到的问题 .
- 在64位服务器上安装oracle 32位客户端只能被编译为x86的程序连接
- 在64位服务器上安装oracle 32位客户端只能被编译为x86的程序连接
- 在64位服务器上安装oracle 32位客户端只能被编译为x86的程序连接
- 不要再被误导了,64位X86 CPU是没有64位寻址能力的!
- 32位与64位操作系统以及CPU的关系
- GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- GCC 64位程序的makefile条件编译心得——32位版与64位版、debug版与release版(兼容MinGW、TDM-GCC)
- JQuery事件机制
- Polymorphic form--多态表单
- BZOJ 1742 Usaco2005 nov Grazing on the Run 边跑边吃草 动态规划
- JAVA学习第三天(4)继承
- JQuery的动画与特效
- X86-64 CPU架构以及64 位GCC对程序编译处理的一些变化
- java高级工程师需要掌握的技术
- 正则表达式
- C11下用于计时程序的代码
- 关于tomcat8在windows2008下高并发下问题的解决方案
- jQuery操作DOM(Document、Object、Model)对象——页面元素操作
- 单例模式的七种写法
- 关于java基础中,接口里面父类的对象指向子类的引用
- 铁轨问题 判断是否为出栈顺序