Я иду через этот link и обучения C. Интересная часть на странице:Как объединение предотвращает фрагментацию памяти?
The real purpose of unions is to prevent memory fragmentation by arranging for a standard size for data in the memory. By having a standard data size we can guarantee that any hole left when dynamically allocated memory is freed will always be reusable by another instance of the same type of union.
Я понимаю эту часть с помощью следующего кода:
typedef struct{
char name[100];
int age;
int rollno;
}student;
typedef union{
student *studentPtr;
char *text;
}typeUnion;
int
main(int argc, char **argv)
{
typeUnion union1;
//use union1.studentPtr
union1.text="Welcome to StackOverflow";
//use union1.text
return 0;
}
Ну, в приведенном выше коде union1.text
повторное использование пространство, ранее использовавшееся union1.studentPtr
, не полностью, но все еще использующее.
Теперь часть, которую я не понимаю, когда освобожденное пространство malloc
не может быть использовано, что приводит к фрагментации памяти?
редактировать: Переход через комментарии и ответы, обязательно использовать the classic text, добавив, это изменение к столбу предполагая, что это поможет новичкам как я
Примечание: Я категорически не согласен с автором в том, что это «настоящая цель профсоюзов», потому что: а) вам нужно было бы использовать только те союзы, чтобы даже иметь шанс предотвратить фрагментацию (и даже тогда, никоим образом не гарантировано), и б) вы вполне можете тратить массу памяти, что еще хуже, чем фрагментация. – Siguza
Эта ссылка выглядит довольно плохой в целом. Что касается вашего вопроса, я никогда не видел, чтобы профсоюзы использовали для этого. – melpomene
@ Сигуза: На самом деле это гарантировано. Но, как вы писали, вы должны поместить все остальные типы данных в этот единственный «союз». Это полностью противоречит современным принципам кодирования, а именно модуляции. – Olaf