数组存储在栈中还是堆中

今天看代码,定义了一个结构体

typedef struct {

    int a;

    int b;

    int char[6*1024];

} ss_t;

//定义一个指针

ss_t *sTmp = NULL;

sTmp = malloc(sizeof(ss_t));

 我的第一反应是,怎么可以定义这么大数据,容易把栈搞死(理由:数组保存在栈空间)。

哎...忘了是由malloc产生的,根本就是生成在堆上。

 

但是这样结构体定义变量时就会容易出现栈资源专用严重问题,如下:

ss_t tmp;

这样一个变量就占用了6K多栈资源,就不合理了。定义改为如下

typedef struct {

    int a;

    int b;

    int char* buf

} ss_t;

定义变量 ss_t  tmp;再使用malloc申请 buf 就更为合理。

你可能感兴趣的:(Linux,c)