在用户程序中,堆空间分配动态内存,栈空间分配的相对来说是静态内存;
数据段和代码段属于静态内存,堆和栈相对来说都是动态内存;
内核中的静态变量和代码属于静态内存,整个用户程序相对来说都是动态内存。
///////////////////////////////////////////////////
同理:
常数值在编译时就确定,变量值要到运行时才确定;
局部变量相对于栈基址的偏移,编译时就确定,堆空间变量的相对位置也要运行时才确定;
静态变量在用户空间的地址【虚拟地址】编译时就确定,而非静态变量运行时才确定;
非虚函数的执行编译时就确定,而虚函数的执行运行时才确定;
直接调用虚函数时,虚函数在虚表中的偏移(或索引)编译时就确定,而通过函数指针调用虚函数时,这个索引值运行时才确定【因此微软采用了VCALL的方式】
本文探讨了程序运行时不同内存区域的划分及其特点,包括堆、栈、数据段和代码段等,并分析了它们在编译时与运行时的区别。此外,还讨论了变量与函数执行的确定性差异。
622

被折叠的 条评论
为什么被折叠?



