#c #arrays #stack
#c #массивы #стек
Вопрос:
Я читал о стеках. Стеки принимают одну операцию за раз. Программа либо выталкивает, либо выталкивает элемент из стека или в стек.
Теперь массивы также являются интерфейсом к базовому стеку. Это правда?
Если да, то как может быть возможно, что с массивом из 50 элементов мы делаем следующее:
$x[30] = "A new value to be written on the older value of this index.";
В частности, я имею в виду язык C (и поскольку исходный код PHP находится на C, я привел пример PHP.)
Я имею в виду, как обрабатывается операция в стеке? Поскольку в то время можно было редактировать только последний элемент стека, то как обрабатывается такой оператор (приведенный выше пример)?
Заранее спасибо.
Комментарии:
1. когда вы присваиваете такой массив строке, это просто вопрос установки указателя на позицию памяти, с которой начинается строка — стек не задействован.
2. Стек — это аппаратная реализация lifo. (и исходный код может получить доступ к любому адресу стека. Массив не имеет встроенной реализации, он просто существует. то, что происходит с массивом, зависит только от исходного кода, который включил этот массив.
Ответ №1:
Now, arrays are also an interface to an underlying stack. Is that true?
Нет. Вы можете использовать массив для реализации стека, но обычно вы не используете стек для реализации массива.
Комментарии:
1. Ой … я понял. Я совершенно неправильно понял концепцию. Хотя, теперь я понял суть и доступность.
Ответ №2:
В памяти при вызове новой функции запускается новый фрейм стека. И когда вы выходите из области видимости }
, фрейм извлекается из памяти, поэтому он называется стеком.
Что касается доступа к памяти, вы можете получить доступ к любому доступному для записи смещению памяти для записи.
Таким образом, доступ к массиву с помощью a[10]
похож на доступ stack_pointer offsetOf_A 10 * sizeOf_A[0]
Теперь массивы также являются интерфейсом к базовому стеку. Это правда?
Нет, это не так. Это стек фреймов, а не (составных или несоставных) переменных. Доступ к памяти по-прежнему можно получить с помощью смещений.