2017-01-27 6 views
1

Это помощь, которая в Tcl «все является строкой». Но опять же, это не совсем точно на 100% (отсюда и мерцающий эффект). Мой вопрос заключается в следующем: предположим, что у меня есть, в списке, следующие значения:Ожидаемый объем памяти чисел против буквенно-цифровой информации в Tcl

list "12" 14 2a "1a" 

Мое ожидание, что, если «все есть строка», память, выделенная для всех 4-х элементов, должны быть одинаковыми (по spec/ожидаемому поведению), поскольку мы рассматриваем 4 экземпляра строк, длина которых равна 2.
Правильное ли это предположение?

+1

Надеюсь, что так, поскольку кавычки удаляются, прежде чем команда получит свои аргументы. –

ответ

1

Эти значения, вероятно, начинаются как строки (это не полностью уверен, что это произойдет из-за возможности обмена буквами). Давайте посмотрим внимательно (если вы делаете это самостоятельно, команда tcl::unsupported::representation находится только в 8.6, а никогда не изменяет объект, на который вы смотрите: я положил ;format x на эту первую строку, чтобы убедиться, что мы не получаем никаких сюрпризов преобразования).

% set value [list "12" 14 2a "1a"];format x 
x 
% tcl::unsupported::representation [lindex $value 0] 
value is a pure string with a refcount of 2, object pointer at 0x100874070, string representation "12" 
% tcl::unsupported::representation [lindex $value 1] 
value is a pure string with a refcount of 2, object pointer at 0x1008741c0, string representation "14" 
% tcl::unsupported::representation [lindex $value 2] 
value is a pure string with a refcount of 2, object pointer at 0x100874c40, string representation "2a" 
% tcl::unsupported::representation [lindex $value 3] 
value is a pure string with a refcount of 2, object pointer at 0x1008743d0, string representation "1a" 
% tcl::unsupported::representation $value 
value is a list with a refcount of 4, object pointer at 0x100874910, internal representation 0x1008eb050:0x0, string representation "12 14 2a 1a" 

Так что да, эти значения практически одинаковы. Внутреннее представление какого-либо из них отсутствует, и каждое строковое представление использует буфер, который был выделен длиной 3 байта (по одному для каждого символа, а один для завершающего байта NUL). Однако сам список имеет строковое представление (а также его внутренний список), несмотря на то, что его не спрашивают; это потому, что вы используете список литералов, и компилятор Tcl оптимизирует это для одного литерала, так как обычно это правильно.

+1

После запроса числового значения будет также представлено внутреннее представление. Для «малых» целых чисел, которые хранятся непосредственно в самой структуре Tcl_Obj и поэтому не требуют дополнительных затрат на хранение. –

 Смежные вопросы

  • Нет связанных вопросов^_^