Ir ao conteúdo
  • Cadastre-se

C Como variáveis do tipo struct ficam alocadas na memória


Posts recomendados

como caria´veis do tipo struct ficam alocadas na memória, por exemplo:

struct livro{
char autor[10];
float preco;
};

//como essas variaveis fica alocado na memória?
struct livro livro1;
strcpy(livro1.autor, "Deitel");
livro1.idade = 320.25;

Aliás, o conceito de struct é muito semelhante a orientação à objetos, ou é impressão minha?

basicamente gostaria de saber o que acontece dentro da memória ao usar struct?

Link para o comentário
Compartilhar em outros sites

O natural é que sejam armazenadas na ordem. No exemplo que você deu, seriam alocados 10 bytes de memoria para o autor e em seguida 4 bytes (sizeof(float)) para o preço, ocupando 14 bytes na memória. Mas na prática, não é isso que acontece. O compilador insere bytes por questões de alinhamento de memória. Então, na verdade, seriam alocados 16 bytes. Veja este exemplo:

#include <iostream>
#include <string.h>

using namespace std;

struct livro {
	char autor[10];
	float preco;
};

int main()
{
	float preco = 303.25;
	livro teste;
	uintptr_t autor_m = (uintptr_t)teste.autor;
	uintptr_t preco_m = (uintptr_t)&teste.preco;
	
	cout << sizeof(livro) << "!=" << sizeof(char) * 10 << "+" << sizeof(float) << endl;
	cout << autor_m << endl;
	cout << preco_m << endl;
    cout << preco_m - autor_m << endl;
    memcpy((void*)(autor_m + 12), &preco, sizeof(float)); //+12 pois a variavel teste.preco está distante 12 bytes do começo da estrutura
	cout << teste.preco;
	cin >> teste.preco;
	return 0;
}

Os resultados indicam que foram alocados 16 bytes para a estrutura e que o membro preço está distante 12 bytes do começo, ao invés de apenas 10 como seria esperado, tendo sido inseridos 2 bytes entre um membro e outro. Então seria assim:

         autor         nada   preço
[B B B B B B B B B B] [B B] [B B B B];

No entanto, pode ser que haja variação de compilador para compilador, tanto na quantidade de bytes inseridos para alinhamento quanto na posição;

Em relação a orientação a objetos, até onde sei estruturas não suportam herança, especialização, funções como membros, acessos privados, públicos, etc, então na minha opinião são bem diferentes.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!