malloc是否使用数据或文本段或其他类型的内存?

时间:2019-06-30 10:20:13

标签: c

char *p1 = "hello";
char *p2 = (char *)malloc(10 * sizeof(char));
char *p3 = "bye";

strcpy(p2, p1);
printf("p2:%s, %p\n", p2, p2);

strcpy(p2, p3); 
printf("p2:%s, %p\n", p2, p2);

1 个答案:

答案 0 :(得分:3)

您在不使用任何操作系统或CPU的情况下用C标记了问题。

数据段和文本段的概念与C无关,它们与某些实现这种区分的操作系统有关。

当然,由于文本段在使用它的系统上用于代码和只读数据,并且可以修改malloc返回的内存,因此它不能是文本段。

数据段可以引用初始化的数据,malloc当然会分配新数据,因此它不是数据段的含义。

如果您对数据段的定义是任何数据,那么返回的内存就是其中的一部分。有一些(不常见/旧的)体系结构具有单独的代码和数据地址空间。

C标准仅保证malloc内存是可修改的并且已正确对齐。