Может кто-нибудь объяснить распределение памяти для константы, определенной в struct vs enum? - PullRequest
0 голосов
/ 30 сентября 2019

Как мы знаем, struct и enum оба являются типом значения. Мы можем определить константы, такие как:

struct Foo {
    static let constant = "SomeConstant"
}

print(Foo.constant)

enum Foo: String {
    case constant = "SomeConstant"
}

print(Foo.constant.rawValue)
  1. Какой из них будет иметь смысл, основываясь на сравнении распределения памяти во время выполнения?
  2. Поскольку оба эти свойства кажутся мне тип-свойствами,они остаются навсегда в памяти стека до тех пор, пока приложение не станет активным.

1 Ответ

2 голосов
/ 01 октября 2019

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

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

Все, что нужно сказать: нет причин, по которым компилятор должен обрабатывать их по-другому, но вы не можете полагаться на это, чтобы неизменить в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...