⑴ 程序设计中,堆和栈比较重要。栈存取速度大于堆,而且编译器可以修改栈大小,这个值可以随意设置吗
学习电脑编程多年了,在程序设计方面也算有一番见解,希望这些经验能对题主有所帮助。
现在堆栈通常默认为8M,对吧?事实上,如果你不滥用递归,或者alloca / vla,大多数时候,就足够了。即使它不超过内核限制,通常也不适合驱动大型的,或者它会影响并发进程的数量。并且过程启动时间也应该稍微减少。当然,如果是专用的服务器系统,问题就不严重了。
⑵ 在linux里,c程序的编辑、编译、调试的详细步骤是什么
(1)用工具写好C程序...比如vi
(2)打开终端,进入你存放C语言代码的路径 例如: cd /opt/
(3)gcc a.c -o abc 意思是:把你的a.c编译成abc可执行文件
(4)在当前目录终端下 运行生成的abc,例如: ./abc 前面的.不要掉了
后面可以用gdb进行调试,你可以自己去学习...这是最基本的!!
⑶ 哪个C语言编译器可以在调试的时候能看到内存信息
用VC6.0就行了,以全英文版为例。
在你要看内存的程序代码段,点手掌图标(设断点的意思),点F5(运行到断点处),点VIEW->debeg windows->里面有几个选项,分别是1、Memory(查看内存,你可以在里面写出你要看的地址值,比如0x10000000),2、Registers(查看32位寄存器值),3、Disassembly(反汇编,可以查到写的C语言,反汇编代码的纯汇编),4、Call Stack(查看堆栈的值,对你写的函数反向调用)。其它的不一定很有用,在主界面就可以看到。
⑷ c语言堆栈是什么意思
1、堆栈空间分配
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
2、堆栈缓存方式
栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
3、效率比较
栈由系统自动分配,速度较快。但程序员是无法控制的。
堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便。
4、存储内容
栈: 在函数调用时,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。
当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向函数的返回地址,也就是主函数中的下一条指令的地址,程序由该点继续运行。
堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排。
(4)c语言编译器堆栈帧调试扩展阅读:
简介
单片机应用中,堆栈是个特殊存储区,堆栈属于RAM空间的一部分,堆栈用于函数调用、中断切换时保存和恢复现场数据。
堆栈中的物体具有一个特性:第一个放入堆栈中的物体总是被最后拿出来, 这个特性通常称为先进后出 (FILO—First-In/Last-Out)。 堆栈中定义了一些操作, 两个最重要的是PUSH和POP。 PUSH(入栈)操作:堆栈指针(SP)加1,然后在堆栈的顶部加入一 个元素。
POP(出栈)操作相反,出栈则先将SP所指示的内部ram单元中内容送入直接地址寻址的单元中(目的位置),然后再将堆栈指针(SP)减1.。这两种操作实现了数据项的插入和删除。
⑸ 堆栈指针是怎么样初始化的
在C语言中,堆栈指针的初始化通常由编译器根据程序的堆栈需求和堆栈的生长方向来确定。堆栈的生长方向通常是从小地址向大地址生长,也就是说,新的栈帧会被压入到堆栈的较低地址部分。
在程序启动时,堆栈指针会被初始化到一个固定的值。这个值通常是根据程序的链接属性(如是否使用了动态链接)和操作系统提供的内存布局来确定的。在某些情况下,初始化堆栈指针的值可能会在链接过程中由链接器自动设置。
在C语言编程中,开发者通常不需要直接操作堆栈指针。编译器会自动处理堆栈的分配和清理。开发者需要关注的是函数调用的堆栈帧大小,以确保足够的堆栈空间被分配,避免栈溢出错误。