Pergunta

exatamente isso: Será que um comprimento cordas igual ao tamanho de bytes? Será que isso importa na linguagem?

Eu acho que é, mas eu só quero ter certeza.

Informações adicionais: Eu estou apenas perguntando em geral. Minha situação específica foi PHP com MySQL.

Como a resposta é não, isso é tudo que eu preciso saber.

Foi útil?

Solução

Não. Uma string terminada zero tem um byte extra. Uma cadeia pascal (a ShortString Delphi) tem um byte extra para o comprimento. E strings unicode tem mais de um byte por caractere.

Por unicode depende da codificação. Pode ser 2 ou 4 bytes por caracteres ou mesmo uma mistura de 1,2 e 4 bytes.

Outras dicas

Depende inteiramente a plataforma e representação.

Por exemplo, em .NET uma corda leva dois bytes na memória per UTF-16 ponto de código. No entanto, pares substitutos requerem dois UTF-16 valores para um personagem completo Unicode no intervalo de U + 100000 para U + 10FFFF. A forma na memória também tem uma sobrecarga para o comprimento da cadeia e, possivelmente, alguns estofo, bem como a sobrecarga objecto normal de um ponteiro de tipo etc.

Agora, quando você escreve uma string para o disco (ou a rede, etc) a partir NET, você especificar a codificação (com a maioria das classes inadimplentes para UTF-8). Nesse ponto, o tamanho depende muito da codificação. ASCII sempre leva um único byte por caractere, mas é muito limitado (sem acentos etc); UTF-8 dá a gama completa de Unicode com uma codificação variável (todos os caracteres ASCII são representadas em um único byte, mas outros ocupam mais). UTF-32 sempre usa exatamente 4 bytes para qualquer caractere Unicode -. A lista continua

Como você pode ver, não é um tema simples. Para calcular quanto espaço uma corda vai levar até você precisará especificar exatamente qual é a situação - se é um objeto na memória em alguma plataforma (e se assim for, qual plataforma - potencialmente mesmo para baixo para as configurações de implementação e sistema operacional), ou se é uma forma codificada crus, como um arquivo de texto, e em caso afirmativo usando a codificação.

Depende do que você entende por "comprimento". Se você quer dizer "número de caracteres", então, não, muitas línguas / métodos de codificação usar mais de um byte por caractere.

Nem sempre, depende da codificação.

Não há uma resposta única; isso depende da linguagem e implementação (lembre-se que algumas línguas têm múltiplas implementações!)

strings ASCII terminada em zero ocupar , pelo menos mais um byte que o "conteúdo" da cadeia. (Mais pode ser alocado, dependendo de como a cadeia foi criado.)

cordas não-terminados de zero usar um descritor (ou estrutura similar) para comprimento de registro, que leva memória extra em algum lugar .

cadeias Unicode (em várias línguas) usar dois bytes por carvão animal.

Cordas em um arquivo de objecto pode ser referenciado por meio de pegas, que proporciona uma camada de indirecta (e mais dados), a fim de simplificar a gestão da memória.

Você está correto. Se você codificar como ASCII, há um byte por caractere. Caso contrário, é um ou mais bytes por caractere.

Em particular, é importante saber como estes efeitos substring operações. Se você não tiver um byte por caractere, faz s [n] obter o byte enésimo ou CHAR enésimo? Obtendo o caractere de ordem n será ineficaz para n grande em vez de constante, como é com um um byte por caractere.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top