• 苏流郁宓
    2022-09-21 来自湖北
    堆,栈由编译器分配,应为虚拟空间!栈是一类数据结构,先入后出!cpu采用时钟轮换制,应对不同的应用软件!取栈入栈由cpu的栈指针决定,栈对c的好处,不仅仅理清数据结构,当cpu遇到中断时 ,可将运行的数据压入栈内存中,先应对中断问题,应对完毕,再从栈内存中取数据(这是栈好处之一) 还有模拟数据的原子化(要么都执行,要么都不执行),在dos模式下,栈最大量为64kb(不知保护模式最大量是多少) 虚拟内存数据是在mmu加载在物理内存上,才正式被cpu运算!不管是栈结构还是堆结构,都是连续的内存空间,但实际物理内存没那么理想,也就是在虚拟内存上连续的栈结构,但通过mmu加载到内存上,可能相邻的两个指令分配在不同的内存页上的

    作者回复: 对的 正确

    
    4
  • LockedX
    2022-09-22 来自湖北
    堆、栈空间是虚拟内存空间,当然是需要用到内存的时候分配物理空间啦

    作者回复: 是的

    
    1
  • peter
    2022-09-22 来自湖北
    请教老师几个问题: Q1:main.elf包含的五个段,就是文中第二个图所示的五个段吗? 文中第二个图,就是那个竖直条形图。 Q2:“把堆看作一棵树的数组对象”,这句话怎么理解? 堆用树来表示,树中有很多节点,所有节点放在数组里,是这样理解吗? Q3:文中main.map的图中,中间的inode =0 表示什么? 文中第一个图,是main.map的图,文件inode列,共有四个0,第一个0是heap,最后两个0是stack,那中间的0表示什么? Q4:堆测试的图中,图中打印的结果是:alloc = 0x684000, alloc2 =0x684001, 但按照sbrk的功能,alloc应该是0x684001,alloc2应该是0x685001。 为什么会是 不同的值? Q5:本课中所讲的5个段,对于C程序来说是这样。C++程序也是这样吗?

    作者回复: Q1 是的 Q2 是的 你理解的对

    
    
  • goforit
    2023-02-01 来自广东
    为什么我的栈输出结果的顺序是 1的3,2,1; 2的3,2,1 和老师的 1,2,3正好反过来
    
    