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


char *p1 = "hello";
char *p2 = (char *)malloc(10 * sizeof(char));
char *p3 = "bye";
strcpy(p2, p1);
printf("p2:%s, %pn", p2, p2);
strcpy(p2, p3); 
printf("p2:%s, %pn", p2, p2);

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

数据段和文本段的概念与C无关,它们与一些使这种区别的操作系统有关。

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

数据段可以参考初始化数据,当然可以分配新数据,因此不可能是数据段的含义。

如果您对数据段的定义是任何数据,则返回的内存是其中的一部分。有一些(不常见/旧的(架构,带有单独的代码和数据地址空间。

C标准仅承诺可修改Malloc内存并正确对齐。

最新更新