Переопределение элемента массива и структуры и механизма стека

#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]

Теперь массивы также являются интерфейсом к базовому стеку. Это правда?

Нет, это не так. Это стек фреймов, а не (составных или несоставных) переменных. Доступ к памяти по-прежнему можно получить с помощью смещений.