为什么我们需要在堆内存中放置结构字段?
Why do we need to place structure fields in the heap memory?
考虑以下程序
typedef struct
{
char *name;
int id;
}Student;
int main()
{
Student std1,std2; //case 1
std1.name =(char*) malloc(7);
strcpy(std1.name, "Daniel");
puts(std1.name);
char name[7]={'D','a','n','i','e','l','[=10=]'}; //case 2
std2.name = name;
puts(std2.name);
}
案例1把student的名字放在heap内存里,而case 2把student2的名字放在sack内存里,如果我没理解错的话
我的问题是,为什么我要将名称(或任何其他结构字段)放在堆内存中?
如果情况 2 适合您,请务必使用它 -- 堆栈内存分配速度更快,并且会自动释放。
当内存太大而无法在堆栈上(例如典型系统上的兆字节),或者它需要比分配它的函数更长寿时,您需要情况 1。这通常发生在分配 struct
本身在堆上。例如:
Student *new_student() {
Student *p = malloc(sizeof(Student));
p->id = 0;
p->name = malloc(7);
strcpy(p->name, "Daniel");
return p;
}
在此示例中,堆栈分配不会削减它。
考虑以下程序
typedef struct
{
char *name;
int id;
}Student;
int main()
{
Student std1,std2; //case 1
std1.name =(char*) malloc(7);
strcpy(std1.name, "Daniel");
puts(std1.name);
char name[7]={'D','a','n','i','e','l','[=10=]'}; //case 2
std2.name = name;
puts(std2.name);
}
案例1把student的名字放在heap内存里,而case 2把student2的名字放在sack内存里,如果我没理解错的话
我的问题是,为什么我要将名称(或任何其他结构字段)放在堆内存中?
如果情况 2 适合您,请务必使用它 -- 堆栈内存分配速度更快,并且会自动释放。
当内存太大而无法在堆栈上(例如典型系统上的兆字节),或者它需要比分配它的函数更长寿时,您需要情况 1。这通常发生在分配 struct
本身在堆上。例如:
Student *new_student() {
Student *p = malloc(sizeof(Student));
p->id = 0;
p->name = malloc(7);
strcpy(p->name, "Daniel");
return p;
}
在此示例中,堆栈分配不会削减它。