Quanto espaço de memória um ponteiro ocupa?

Muito obrigado pela A2A ..
Fico feliz em ver que você está interessado em aprender mais sobre ponteiros. Você precisa ter uma idéia clara sobre os ponteiros para entender completamente o conceito.

Primeiro de tudo, acho que você sabe que tipos de dados como int, char, float ocupam uma quantidade diferente de espaço de memória, de acordo com seu compilador e processador. Em um compilador moderno de 32 bits que tem como alvo uma CPU de 32 bits, ele definitivamente terá 4 bytes. Eu acho que você ainda está perguntando por que é isso? então deixe-me esclarecer ..

Dentro de um ponteiro, você armazena o endereço de outra variável, como int, float, char. Portanto, o tamanho de um ponteiro deve ser grande o suficiente para armazenar o endereço de qualquer outra variável. Agora preste atenção, o tamanho do endereço é sempre o mesmo, independentemente de ser um int, float ou char. Suponha que você tenha uma variável int a. Agora, se você imprimir o endereço de a, obterá algo como isto 2293520. Agora, se você imprimir o endereço de outra variável flutuante b, ele fornecerá um endereço como 2509652. Veja, o número de caracteres de ambos os endereços é o mesmo . Isso significa que, em um computador específico, o endereço de todas as variáveis ​​tem o mesmo comprimento.

Como um ponteiro também é um tipo de variável, ele também possui seu próprio endereço, onde a variável do ponteiro é salva na memória. É sempre o mesmo, independentemente do tipo de ponteiro. Agora eu escrevi um código para que você possa entender completamente o conceito.

  #include 
 #include 

 int main ()
 {
     int a = 5;

     int * int_pointer;  // um ponteiro inteiro
     float * float_pointer;  // um ponteiro flutuante
     char * char_pointer;  // um ponteiro de caractere

     printf ("tamanho de um ponteiro int =% d \ n", sizeof (int_pointer));
     printf ("tamanho de um ponteiro flutuante =% d \ n", sizeof (float_pointer));
     printf ("tamanho de um ponteiro de char =% d \ n", sizeof (char_pointer));

     retornar 0;
 }

Eu sugiro que você execute esse código e veja com seus próprios olhos qual é o tamanho de todos os tipos de ponteiros em sua máquina. Caso você não saiba, a função sizeof () retorna o tamanho de uma variável. Aqui, ele retorna o tamanho dos três ponteiros e os imprime.

Espero que ajude, muito obrigado .. continue aprendendo .. 🙂

Obrigado por A2A.I acho que você está pedindo quanta memória um ponteiro usa. já que os ponteiros se referem à localização na memória e armazenam o endereço das variáveis. portanto, quanto espaço será necessário no disco depende do software. para o software de 32 bits, serão necessários 32 bits (4 bytes) para todos os tipos de dados como int, float, char. e para o software de 64 bits, serão necessários 64 bits (8 bytes).

Assumindo a linguagem de programação C, não há tamanho padrão para nenhum ponteiro; é uma implementação específica. Em geral, é o tamanho do barramento de endereços, mas isso está longe de ser uma verdade universal. Como já foi dito, você pode descobrir qual é o tamanho de um ponteiro usando o operador sizeof () na arquitetura de destino. Em geral, também, o tipo de dados que o ponteiro aponta é em grande parte irrelevante quanto ao tamanho do ponteiro. Também não é necessariamente o caso em que todos os ponteiros terão o mesmo tamanho, mesmo em uma única implementação de CPU. Em certas arquiteturas, um ponteiro pode se referir a um espaço de endereço específico e separado, como a memória endereçável em bits da CPU da família 8051, que requer apenas um endereço de 8 bits. Em outras arquiteturas, como o modo real x86 (MS-DOS), um ponteiro pode refletir a composição de deslocamento de segmento de todos os acessos à memória e consumir 32 bits, mesmo que o barramento de endereço tenha apenas 20 bits de largura. Na mesma arquitetura, existem modelos de memória usados ​​nos quais os ponteiros assumem que todos os dados estão no mesmo segmento e que apenas o componente de deslocamento de 16 bits de um endereço é necessário. Esses modelos de memória podem até ser misturados, e o programador escolhe o modelo que melhor se adapta à aplicação. É bastante raro precisar realmente saber a quantidade específica, embora você precise saber que o tamanho é importante. A linguagem possui todos os mecanismos para permitir que você crie seu software adequadamente.

Eu acho que você está perguntando como árvores, listas são armazenadas em disco. Firts, eles são serializados. Na serialização, os dados são armazenados como fluxo de bytes, como se estivessem armazenados no buffer de memória. Em vez de ponteiros, o deslocamento desde o início do fluxo de bytes é gravado.

Para ter uma idéia, como exercício, tente armazenar uma lista vinculada na memória compartilhada.

Vamos dar um exemplo.

A lista possui 3 nós. Diga, n1, n2 e n3.

Armazene os dados da seguinte maneira.

n1 dados l deslocamento de n2 n2 dados l deslocamento de n3. n3 data l -1 (ponteiro nulo)

Digamos que o tamanho dos dados seja 4 bytes. O tamanho do deslocamento também é de 4 bytes (pode ser de 8 bytes). deslocamento n2 é 8 bytes. O deslocamento n3 é 16 bytes.
Isso significa que após 8 bytes, você lerá n2.

Observe que esse deslocamento é relativo. Pode ser qualquer coisa de acordo com sua lógica. Como você pode armazenar o deslocamento do campo atual em vez do início do buffer. Enquanto ponteiros são absolutos.

Espero que isso responda.

Eu li isso para significar “quanto espaço de dados um ponteiro ocupa em termos de espaço de armazenamento na memória?”
Um ponteiro armazena o endereço de uma variável. Portanto, o espaço de memória necessário para um ponteiro depende da largura do endereço desse computador . Se você tiver um processador de 32 bits, um ponteiro ocupará 32 bits ou 4 bytes. Se você tiver um computador de 64 bits, ele ocupará 64 bits ou 8 bytes. Em um microprocessador de 8 bits, ele ocupará 8 bits. Se você vir um processador de 128 bits no futuro, ele ocupará 128 bits.

Obrigado pela A2A !!

Todos os ponteiros int, char e float são iguais! Ele apenas armazena o endereço e, portanto, possui um tipo de dados int não assinado. Portanto, o espaço de memória necessário para um ponteiro depende da largura do endereço desse computador. No sistema de 32 bits, um ponteiro ocupará 4 bytes e nos sistemas de 64 bits, serão necessários 8 bytes.

Como um ponteiro deve poder apontar para qualquer endereço na RAM, ele deve depender do tamanho da RAM.

Considere um tamanho de RAM de 4 GB:

4 GB == 2 ^ 32 ie. São necessários 32 bits para representá-lo e, portanto, 4 bytes.

em outras palavras:

Máquina de 32 bits == 4 bytes

Máquina de 64 bits == 8 bytes

Máquina de 64 bits == 2 ^ 64 == 16 GB

Nota: Por tamanho da RAM, não quero dizer literalmente o tamanho real da RAM, mas o tamanho da RAM virtual. ie Tamanho do espaço praticamente endereçável.

O espaço de memória usado por um ponteiro geralmente depende do tipo de sistema, ou seja, 32 bits ou 64 bits. Um ponteiro armazena o endereço de uma variável. Agora, os bits de endereço necessários dependerão da arquitetura do computador, ou seja, 32 bits têm memória de 4 bytes para ponteiros e 64 bits levam 8 bytes. Atualmente existem até sistemas do tipo x86 que não possuem número fixo de bits para alocações de memória. Você pode apenas verificar o espaço da memória usando sizeof (tipo de ponteiro) para qualquer tipo de sistema.

É o tamanho de um comprimento de uma ‘palavra de dados’. O endereço é sempre um valor inteiro. Portanto, o tamanho do ponteiro = tamanho de (inteiro) = tamanho de uma ‘palavra de dados’

Agora, o tamanho da palavra inteira ou de dados depende da arquitetura da máquina / processador. No sistema operacional de 32 bits, é de 4 bytes e no sistema de 64 bits, é de 8 bytes e assim por diante.

Bijendra

Autor de https://www.facebook.com/threejo…

Depende do processador do seu computador, se você tiver um processador de 32 bits, serão necessários 32 bits de memória e, se você tiver um processador de 64 bits, serão necessários 64 bits.

Só isso .

o espaço que um número inteiro não assinado ocupa

Como variáveis ​​são armazenadas na pilha ou na pilha. Onde uma variável de ponteiro é armazenada?

O tamanho do ponteiro será sempre o de uma palavra.