汉扬编程 编程大纲 如何用C语言定义arm状态下的r13寄存器为堆栈指针

如何用C语言定义arm状态下的r13寄存器为堆栈指针

  1,你如果用C语言编程的话,堆栈跟你见不着面,编译器会处理,何来定义堆栈之说?
2,你如果是用汇编和C混合编程的话你就只能用约定俗成的SP寄存器,
3,如果只用ARM汇编的话,在汇编代码里你可以随便用任何寄存器来充当堆栈的角色,无非就是在程序初始化时将哪个寄存器赋一个地址,然后你把这个寄存器当作栈指针寄存器,进行压栈和出栈操作时来改变或恢复这个寄存器的值,这样一来就完成了在汇编代码里的操作堆栈的功能。
  但是在汇编代码里最重要的是要能做到恢复现场,有一个寄存器没恢复的话整个程序就会出错,还有你不用SP的话就不能用PUSH和POP指令,直接操作你要拿来当堆栈指针的寄存器就OK。
4,对于堆栈的理解问题,堆栈是一种抽象数据容器,即包括操作的数据结构,相当于C 中的类的概念,但还是有区别,无非就是划定一块内存区,定义任何数据想要在这块内存区存取都要遵守先进后出的规则,而INTEL和ARM的CPU架构里都有一个物理寄存器SP用来充当指向堆栈(你划定的那块内存区)的栈顶指针,在C语言里要实现堆栈这样的数据类型,就要用你定义的变量来充当栈顶指针,但在汇编里,就是SP了。
  
为了这个5分,我可没少写呀。

C 如何手动更改系统堆栈大小?

  看看是否对你有帮助:
/STACK 选项设置堆栈的大小(以字节为单位)。此选项仅在生成 。exe 文件时使用。
reserve 值指定虚拟内存中的总的堆栈分配。对于 x86 和 x64 计算机,默认堆栈大小为 1 MB。
  在 Itanium 芯片组上,默认大小为 4 MB。
commit 取决于操作系统所作的解释。在 Windows NT 和 Windows 2000 中,它指定一次分配的物理内存量。提交的虚拟内存导致空间被保留在页面文件中。
  更高的 commit 值在应用程序需要更多堆栈空间时可节省时间,但会增加内存需求并有可能延长启动时间。对于 x86 和 x64 计算机,默认提交值为 4 KB。在 Itanium 芯片组上,默认值为 16 KB。
以十进制或 C 语言表示法指定 reserve 值和 commit 值。
  
设置堆栈大小的另一种方法是使用模块定义 (。def) 文件中的 STACKSIZE 语句。如果两者都指定,则 STACKSIZE 重写堆栈分配 (/STACK) 选项。可以使用 EDITBIN 工具在生成 。exe 文件之后更改堆栈大小。
  
在 Visual Studio 开发环境中设置此链接器选项
打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C 项目属性。
单击“链接器”文件夹。
单击“系统”属性页。
  
修改下列任一属性:
堆栈提交大小
堆栈保留大小。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6130.html

如何用中序法建立一个二叉树 C语言

C 怎么定义超长的整型?long long int不行?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部