ForHosting KIT · Ferramentas para dev

Índice de array por linhas: offset e endereço

Num array 3×4×5 com elementos de 8 bytes, a posição 1, 2, 3 é o elemento 33: deslocamento de 264 bytes e endereço 4360 a partir da base 4096. Você vê cada passo intermediário para conferir aritmética de ponteiros ou depurar um buffer achatado. Grátis no seu navegador.

  • Grátis
  • Funciona no seu navegador
  • Sem cadastro
  • Seus dados não saem do seu aparelho
Use pelo WebAPIE-mailTelegramApp em breve
Se você digitar
Dimensões
3, 4, 5
Índices
1, 2, 3
Tamanho do elemento (bytes)
8
Endereço base
4.096
Você obtém
Ordem
row-major
Passos (strides)
20, 5, 1
Contribuições
20, 10, 3
Índice linear
33

Esta calculadora transforma coordenadas de um array multidimensional na posição linear única usada pelo armazenamento contíguo por linhas no estilo C. Informe as dimensões do eixo mais externo ao mais interno, um índice de base zero para cada eixo, o tamanho do elemento em bytes e, se desejar, o endereço-base. O resultado apresenta o stride de cada eixo, a contribuição de cada índice, o offset do elemento, o offset em bytes e o endereço final, facilitando a conferência de ponteiros e buffers achatados.

Informe dimensões e índices na mesma ordem de eixos

Liste os tamanhos das dimensões do eixo mais externo ao mais interno, exatamente como aparecem na declaração ou no shape. Em um array com 3 planos, 4 linhas e 5 colunas, informe 3, 4 e 5. Depois, forneça um índice de base zero por dimensão, na mesma ordem.

A coordenada do segundo plano, da terceira linha e da quarta coluna é 1, 2 e 3. Cada dimensão precisa ser um inteiro positivo; cada índice deve ser igual ou maior que zero e menor que a dimensão correspondente. A calculadora rejeita ranks incompatíveis e coordenadas fora dos limites, evitando produzir silenciosamente um endereço externo ao array.

O tamanho do elemento também é obrigatório, pois o índice sozinho não define um local em bytes. Use a largura real, como quatro bytes para um inteiro comum de 32 bits ou oito para um double. Se você souber onde o array começa, informe o endereço-base não negativo; caso contrário, mantenha zero e interprete o resultado como offset desde o início.

Entenda o cálculo de stride por linhas

Na ordem por linhas, o último eixo fica contíguo; avançar uma posição nesse eixo desloca exatamente um elemento, portanto seu stride é um. O stride de cada eixo anterior é o produto de todas as dimensões à direita. Para dimensões 3 por 4 por 5, os strides são 20, 5 e 1: mudar de plano pula quatro linhas com cinco elementos, mudar de linha pula cinco elementos e mudar de coluna pula um.

A ferramenta multiplica cada índice pelo stride de seu eixo e exibe esses produtos como contribuições. A soma gera o índice linear de base zero. Para 1, 2 e 3, a conta é 1 vezes 20, mais 2 vezes 5, mais 3 vezes 1, totalizando 33.

Os valores intermediários tornam o resultado auditável e revelam erros comuns, como inverter dimensões ou usar multiplicadores de ordem por colunas. Toda operação usa inteiros verificados. Se um produto ou uma soma ultrapassar o intervalo seguro do JavaScript, a entrada é rejeitada em vez de retornar um endereço arredondado.

Converta o índice do elemento em endereço de bytes

O índice linear conta elementos, não bytes. Para obter o offset em bytes, multiplique esse índice pelo tamanho do elemento. O elemento 33, com elementos de oito bytes, começa 264 bytes após o início do array.

O endereço final é esse offset somado ao endereço-base: com base 4096, o elemento começa em 4360. A resposta separa índice linear, offset em bytes, endereço-base e endereço final para que você compare cada etapa com código-fonte, depurador, especificação binária ou cálculo de buffer de GPU. O endereço é um inteiro decimal exato dentro do intervalo seguro; a ferramenta não acessa memória nem examina processos.

O cálculo pressupõe um array denso e contíguo, sem padding entre elementos ou linhas. Linhas com pitch, dimensões principais explícitas, views fatiadas ou strides personalizados exigem os strides físicos reais.

Conferir aritmética de ponteiros

Valide offsets de elementos e bytes usados em C, C++, Rust ou WebAssembly antes de acessar um buffer achatado.

Depurar achatamento de tensores

Compare strides e contribuições esperados com uma biblioteca de tensores, um serializador ou uma rotina de intercâmbio.

Ensinar organização da memória

Mostre como cada coordenada multidimensional contribui para uma posição contígua e para o endereço final.

Os índices começam em zero?

Sim. Cada índice começa em zero e deve ser menor que o tamanho da dimensão correspondente.

O que é ordem por linhas?

É um layout contíguo em que o último eixo varia mais rapidamente, como nos arrays multidimensionais padrão de C.

Qual endereço-base devo usar?

Informe o endereço em bytes onde o array começa. Use zero quando você precisar apenas do offset relativo ao início.

A ferramenta aceita ordem por colunas?

Não. O cálculo implementa intencionalmente a ordem por linhas; o armazenamento por colunas usa outra sequência de strides.

Ela considera padding ou strides personalizados?

Não. O layout deve ser denso e contíguo. Armazenamento com pitch, padding, transposição ou fatias requer os strides físicos.

Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.

POSThttps://api.kit.forhosting.com/dev/array-rowmajor-index

Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.

curl -X POST https://api.kit.forhosting.com/dev/array-rowmajor-index \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"dimensions":[3,4,5],"indices":[1,2,3],"element_size_bytes":8}'
{
  "dimensions": [
    3,
    4,
    5
  ],
  "indices": [
    1,
    2,
    3
  ],
  "element_size_bytes": 8
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev.array_rowmajor_index",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.

por chamadaUS$ 0,002

Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.

max_dimensions32
HTTPCódigoO que significa
401unauthorizedToken ausente ou inválido. Confira o header Authorization.
402insufficient_balanceSaldo insuficiente para esta tarefa. Faça uma recarga e tente de novo.
404unknown_typeEsse tipo de tarefa não existe. Confira o campo type no catálogo.
429rate_limitedMuitas requisições em pouco tempo. Espere um instante e tente de novo.

Converta o índice do elemento em endereço de bytes

Cada chamada à API custa US$ 0,002; para conferências rápidas, o mesmo cálculo determinístico pode ser executado no navegador.

Quanto custa pela API?

Cada solicitação custa US$ 0,002. A versão no navegador executa localmente o mesmo cálculo determinístico.

Ver a documentação completa do KIT →