Как машина знает, сколько места выделяется для общего указателя? Разделяется ли оно только при нажатии на тип?Общие указатели в C и распределение памяти
ответ
На большинстве платформ указатели обычно имеют фиксированный размер, основанный на архитектуре памяти системы, для которой вы компилируете. Их тип, в связи с этим, не имеет значения. Точка int
имеет тот же размер, что и точка для комплекса struct
. Тот факт, что это void
, не меняет этого.
Все указатели имеют размер, известный компилятору во время компиляции; это размер указываемого предмета, который может быть другим. Вы сами передаете нужный размер malloc
/calloc
, поэтому у компилятора нет проблем с распределением.
EDIT (в ответ на комментарий) Бывают случаи, когда размеры разных указателей различны. Например, в коде, скомпилированном для архитектуры Гарварда, указатель данных должен включать дополнительное хранилище, которое отличает данные, хранящиеся в памяти программы, от данных, хранящихся в памяти данных, в то время как указатели на объекты не нуждаются в этом дополнительном хранилище. Однако это известно компилятору, поэтому он знает требуемый размер выделения, глядя на тип указателя.
C не C++, обсуждение шаблонов здесь не относится. –
@VariableLengthCoder К сожалению, вы правы! Меня отбросило упоминание «общих» указателей. – dasblinkenlight
Согласен, использование OP неопределенного термина «общий указатель» затрудняет ответ на этот вопрос. –
Указатели имеют одинаковый размер независимо от того, на что они указывают, это только то, что они указывают на то, что могут быть разных размеров.
Это не обязательно так. –
Я не уверен, что вы подразумеваете под «общим указателем», но если вы имеете в виду «указатель на void», это просто тип, способный представлять любое другое значение указателя . Это не означает, что он должен быть сколь угодно большим; на самом деле он (определяется как) тот же размер и представление, что и «указатель на символ», который также может указывать на любой тип.
- 1. Структуры, указатели и распределение памяти
- 2. Указатели на структуры и распределение памяти в C
- 3. Распределение памяти и освобождение памяти в C
- 4. Общие указатели функций в C
- 5. Распределение памяти в C++
- 6. Распределение памяти в C
- 7. Распределение памяти в C
- 8. Распределение и структурирование памяти
- 9. Распределение памяти в C++
- 10. Распределение памяти в C++
- 11. C++ Указатель и распределение памяти
- 12. распределение памяти в C/C++
- 13. Общие указатели и производительность
- 14. общие указатели и многопоточность
- 15. Общие указатели Коллекции и общие методы
- 16. C++ Распределение динамической памяти
- 17. C распределение структура ++ памяти
- 18. Расширенное распределение памяти C
- 19. C# Распределение памяти массива
- 20. C# распределение памяти
- 21. C++: Распределение памяти
- 22. c распределение памяти
- 23. Динамическое распределение памяти, C++
- 24. Распределение памяти C (malloc)
- 25. C++ «новое» распределение памяти
- 26. Динамическое распределение памяти C
- 27. C - Распределение динамической памяти
- 28. C динамическое распределение памяти
- 29. распределение Уменьшения памяти C++
- 30. C++ Распределение памяти. Матрица
Это не обязательно так. –
@OliCharlesworth - когда/как размер указателя отличается? – zellio
В стандарте C нет утверждений о том, что все указатели должны быть одного размера, а на некоторых архаичных архитектурах они определенно не имеют одинакового размера (хотя у меня нет никаких примеров, чтобы справиться). –