问题一:为什么全局变量g_mid在进程执行中已经分配到data区中,但是在主函数调用Add函数时却无法使用全局变量g_mid?
答:作用域是针对编译和链接的过程,生存期是针对程序的执行过程,而在编译过程中,全局变量是在Add函数后定义的,按照作用域的规定,编译是无法通过的,而编译无法通过就不能产生可执行文件,没有执行文件进程就不能执行,所以也就不存在全局变量分配到data区中而无法调用这一说法。生存期的讨论范畴是程序编译链接成功后生成了可执行文件,当程序执行时才存在分配资源给进程,最后回收资源。
问题二:堆区如何使用,是否定义全局变量或者局部变量就可以调用这部分资源?
答:
堆区(动态空间)的生存期的管理由程序员通过调用malloc函数来申请使用这部分区域,通过调用free函数来回收这部分区域。