Оптимизируются ли строковые литералы компилятором?

Выполняет ли компилятор C # или .NET CLR какую-либо умную оптимизацию памяти строковых литералов / констант? Могу поклясться, что слышал о концепции " = (§Операторы сравнения) должны быть полностью определены для операндов ключевого типа; таким образом, тип ключа не должен быть структурой, массивом или фрагментом. Если тип ключа является типом интерфейса, эти операторы сравнения должны быть определены для значений динамического ключа; сбой вызовет панику во время выполнения.

Я хочу создать карту хеш-значений, которые поступают из интерфейса Hash , который возвращает [] байт , но для которого все мои хеши выполняются по тому же алгоритму (поэтому я знаю, что он уместится в [16] байт ). Как я могу предоставить соответствующий интерфейс, чтобы тип map позволял использовать [] байт или [16] байт или некоторую их оболочку в качестве ключа?

В настоящее время при моем использовании возникает следующая ошибка:

dupes := make(map[[16]byte][]string)
finddups.go:55: invalid map key type [16]uint8

Обновление (март 2012 г.): Go1 разрешает [16] байт в качестве типа ключа.

5
задан Matt Joiner 7 March 2012 в 13:24
поделиться