Использует ли malloc данные, текстовый сегмент или другой тип памяти? - PullRequest
0 голосов
/ 30 июня 2019
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 Ответ

3 голосов
/ 30 июня 2019

Вы пометили вопрос с C без ссылки на какую-либо операционную систему или ЦП.

Понятия сегмента данных и текстового сегмента не связаны с C, они связаны с некоторыми операционными системами, которые делают это различие.

Конечно, поскольку текстовый сегмент в системах, которые его используют, предназначен для кода и данных только для чтения, а память, возвращаемая malloc, может быть изменена, это не может быть текстовый сегмент.

Сегмент данных может относиться к инициализированным данным, malloc, конечно, выделяет новые данные, поэтому значение этого сегмента данных не может быть таким.

Если ваше определение сегмента данных - это какие-либо данные, товозвращенная память является частью этого.Существуют некоторые (необычные / старые) архитектуры с отдельным адресным пространством кода и данных.

Стандарт C только обещает, что память malloc модифицируема и правильно выровнена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...