日期:2014-05-16  浏览次数:20891 次

全局结构体变量和全局结构体指针变量
背景:一个程序定义了一个大的全局结构体,来保存全局信息;
定义方式有2种:
1、定义一个全局结构体变量;(程序运行之前,它就存在了)
2、定义一个全局结构体变量指针,然后在函数中malloc空间;(存在堆中)
这两种方式有什么不一样吗?
在空间和时间上有区别吗???
求大牛指导!
------最佳解决方案--------------------
引用:
楼上讲的很对,如果存在许多大的结构的话,使用栈会导致程序崩溃而无法正常运行,这时就需要把它们分配到堆上。

都说了是全局结构了,怎么会在栈上分配呢?是在数据段了。

引用:
背景:一个程序定义了一个大的全局结构体,来保存全局信息;
定义方式有2种:
1、定义一个全局结构体变量;(程序运行之前,它就存在了)
2、定义一个全局结构体变量指针,然后在函数中malloc空间;(存在堆中)
这两种方式有什么不一样吗?
在空间和时间上有区别吗???
求大牛指导!

如果固定大小,两种方式应该没有什么区别。
如果需要在启动时根据参数等调整大小,考虑用malloc
------其他解决方案--------------------
你定义一个结构体。。不用指针分配内存的话。。那么这块内存一般是在栈上分配。。而栈的空间是比较有限的。。空间的分配和释放都是由系统来给你完成。。而如果你用malloc分配内存,那么他是在堆上分配,这块内存必须手动释放。。或者在程序运行结束后由系统收回。。也就是,如果你直接创建结构体,那么内存的分配和释放你就可以不管了。但是如果你用指针分配,那么你就得自己手动分配释放。。
------其他解决方案--------------------
楼上讲的很对,如果存在许多大的结构的话,使用栈会导致程序崩溃而无法正常运行,这时就需要把它们分配到堆上。
------其他解决方案--------------------
引用:
楼上讲的很对,如果存在许多大的结构的话,使用栈会导致程序崩溃而无法正常运行,这时就需要把它们分配到堆上。

都说了是全局结构了,怎么会在栈上分配呢?是在数据段了。