Разница между статическим методом и нестатической функцией в памяти

#c #class #static-members

#c #класс #статические члены

Вопрос:

Насколько я понимаю, каждый экземпляр класса имеет свои собственные переменные-члены в памяти, так что он может хранить разные значения для разных объектов. Однако это не то же самое для функций-членов. Функции-члены повторно используются в объектах класса, поэтому у него есть только один адрес с одним блоком памяти, на который можно ссылаться, когда это необходимо для всех объектов.

Статическая функция предназначена для доступа к статическим членам. Однако статическая функция также существует только одна в течение срока службы ее приложения. Помимо того, что он является статическим средством доступа, на низком уровне он не отличается от обычных функций класса, не так ли? Или, может быть, я ошибаюсь, что каждый класс имеет свои собственные функции?

Ответ №1:

Нестатические функции принимают дополнительный параметр, this , который является указателем на экземпляр класса с переменными, специфичными для экземпляра.

Статические функции не имеют этого параметра (таким образом, вы не можете использовать this в статической функции и можете обращаться только к статическим элементам данных).

Ответ №2:

Это отличается от языка к языку, но в C или C 03 функции обычно сопоставляются с функциями сборки; то есть они существуют один раз в памяти (будь то свободные функции, функции класса или статические функции класса) и принимают аргументы в качестве параметров, включая неявный this указатель на функции-члены.

В C 11 лямбда-функции вводят новшество: каждый экземпляр так называемой функции будет содержать некоторое состояние. Следовательно, с точки зрения реализации это означает, что необходимо создать «обычную» функцию, и она связана с анонимным пакетом данных (при необходимости). Не обязательно дублировать функцию при каждом создании лямбда-выражения, но данные дублируются. Полезно помнить, что лямбды (в C ) заменяют объекты функций (или объекты предикатов): это просто синтаксический сахар, реализация аналогична.

Ответ №3:

Единственное различие между статическими функциями и функциями-членами заключается в том, что функции-члены всегда this автоматически передают указатель.

Ответ №4:

просто, если на него ссылаются, статические функции создают для себя единый набор памяти и предназначены для статических элементов данных, которые обычно не изменяются. Но нестатические функции создают отдельный набор памяти для каждого экземпляра и предназначены как для нестатических, так и для статических элементов данных. Если вам требуется стабильный вывод, перейдите к статическому, а если вам требуется альтернативный вариант, перейдите к нестатическому.