Метод, который не обращается к каким-либо экземплярам данных, должен быть помечен как static
: https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1822-mark-members- as-static? view = vs-2017 Он может быть объявлен как метод private
в зависимости от использования.
Если метод получает доступ к каким-либо данным экземпляра, он не может быть статичным. Компилятор обеспечивает это.
Типичными примерами статических методов являются, например, String.Format
и Int32.Parse
. Нет смысла выделять string
или int
перед вызовом этих методов.
Рост стека обычно не зависит от самой операционной системы, но от процессора это работает. Солярис, например, работает на x86 и SPARC. MAC OSX (как Вы упомянули) работает на PPC и x86. Linux работает на всем от моего большого гудящего' System z на работе к маленькие небольшие наручные часы .
, Если ЦП обеспечивает какой-либо предпочтительный вид, ABI / соглашение о вызовах, используемое ОС, определяет, какой выбор необходимо сделать, если Вы хотите, чтобы Ваш код назвал всех кодом else.
процессоры и их направление:
Показ моего возраста на тех несколько последних, 1802 был микросхемой, используемой для управления ранними шаттлами (распознающийся, если двери были открыты, я подозреваю, на основе вычислительной мощности, это имело:-), и мой второй компьютер, COMX-35 (после моего ZX80).
детали PDP11, подбираемые от здесь , 8 051 деталь от здесь .
архитектура SPARC использует модель регистра раздвижного окна. Архитектурно видимые детали также включают кольцевой буфер окон регистра, которые допустимы и кэшируются внутренне с прерываниями когда это законченное. См. здесь для деталей. Как [1 111] руководство SPARCv8 объясняет , СОХРАНИТЕ и ВОССТАНОВИТЕ инструкции, похожи на инструкции по ADD плюс вращение окна регистра. Используя положительную константу вместо обычного отрицания дал бы вверх растущий стек.
вышеупомянутая техника SCRT - другой - 1802 использовал некоторых, или это - шестнадцать 16-разрядных регистров для SCRT (стандартный вызов и метод возврата). Каждый был счетчиком команд, Вы могли использовать любой регистр в качестве ПК с SEP Rn
инструкция. Каждый был указателем вершины стека, и два были установлены всегда указать на адрес кода SCRT, один для вызова, один для возврата. Никакой регистр рассматривали специальным способом. Следует иметь в виду, что эти детали из памяти, они не могут быть полностью корректными.
, Например, если R3 был ПК, R4 был адресом вызова SCRT, R5 был обратным адресом SCRT, и R2 был "стеком" (кавычки, поскольку он реализован в программном обеспечении), SEP R4
установил бы R4, чтобы быть ПК и начать выполнять код вызова SCRT.
Это тогда сохранило бы R3 на R2 "стек" (я думаю, что R6 использовался для временного устройства хранения данных), корректируя его или вниз, захватите два байта после R3, загрузите их в [1 113] R3, затем сделайте SEP R3
и работать в новом адресе.
Для возврата это было бы SEP R5
, который вытянет старый адрес от стека R2, добавить два к нему (чтобы пропустить адресные байты вызова), загрузить его в R3 и SEP R3
, чтобы начать выполнять предыдущий код.
Очень трудно для переноса головы первоначально после всего 6502/6809/z80 стекового кода, но все еще изящный в bang-your-head-against-the-wall виде пути. Также одной из больших функций продажи микросхемы был полный комплект 16 16-разрядных регистров, несмотря на факт, Вы сразу потеряли 7 из тех (5 для SCRT, два для DMA и прерываний из памяти). Ahh, триумф маркетинга по действительности:-)
System z на самом деле весьма схож, с помощью его регистров R14 и R15 для вызова/возврата.
В C++ (адаптируемый к C) stack.cc:
static int
find_stack_direction ()
{
static char *addr = 0;
auto char dummy;
if (addr == 0)
{
addr = &dummy;
return find_stack_direction ();
}
else
{
return ((&dummy > addr) ? 1 : -1);
}
}
Стек углубляется на x86 (определенный архитектурой, поп увеличивает указатель вершины стека, продвиньте декременты.)
Это углубляется, потому что память, выделенная программе, имеет "постоянные данные" т.е. код для самой программы внизу, тогда "куча" в середине. Вам нужна другая фиксированная точка, от которой можно сослаться на стек, так, чтобы листы Вы вершина. Это означает, что стек углубляется, пока это не потенциально смежно с объектами на "куче".
Преимущество роста состоит в том, что в старых системах стек обычно находится наверху памяти , Программы обычно заполняли память, начиная с самого дна, поэтому такого рода управление памятью сводило к минимуму необходимость измерять и размещать дно стека где-нибудь разумным.