Ir ao conteúdo
  • Cadastre-se

Biblioteca para vetores grandes


Kinzel

Posts recomendados

Em C, por padrão pode-se criar uma matriz com as características que você citou GbhmuXl.gif:

 

 

static char Exemplo[500000][2];  //Criaria uma matriz de aproximadamente 0,95 MB.static char OutroExemplo[1000000][2];  //Criaria uma matriz de aproximadamente 1,9 MB.

 

 

 

Devido a certas limitações frequentes, é recomendado que essas matrizes sejam variáveis estáticas, que são caracterizadas por permanecerem na memória principal do computador até o término da execução do programa. Uma variável declarada com static é um exemplo de variável estática F5Rua4D.gif.

 

 

 

Entretanto, se o que você pretende é carregar gigabytes de informação de uma vez na memória principal, é melhor que procure formas mais eficientes de alcançar seus objetivos.

 

 

 

Espero ter ajudado GbhmuXl.gif.

Link para o comentário
Compartilhar em outros sites

Em C, por padrão pode-se criar uma matriz com as características que você citou GbhmuXl.gif:

static char Exemplo[500000][2];  //Criaria uma matriz de aproximadamente 0,95 MB.static char OutroExemplo[1000000][2];  //Criaria uma matriz de aproximadamente 1,9 MB.

Devido a certas limitações frequentes, é recomendado que essas matrizes sejam variáveis estáticas, que são caracterizadas por permanecerem na memória principal do computador até o término da execução do programa. Uma variável declarada com static é um exemplo de variável estática F5Rua4D.gif.

 

 

 

Entretanto, se o que você pretende é carregar gigabytes de informação de uma vez na memória principal, é melhor que procure formas mais eficientes de alcançar seus objetivos.

 

 

 

Espero ter ajudado GbhmuXl.gif.

 

Obrigado pela resposta, rjjj.

 

Acho que fui descuidado com o exemplo! Eu ando trabalhando com matrizes 400.000.000x6, sendo que duas colunas são double e o restante posso usar como short (ou int). Pelas limitações, eu acabei pegando apenas uma das colunas - a mais importante -, que é uma aproximadamente 403.343.425x1 (vetor) de double, aproximadamente 3GB.

 

Você saberia me dizer se há alguma biblioteca que salva a matriz na memória do disco rígido e não na flash memory? Usando apenas ponteiros para apontar a um arquivo. Facilitando a manipulação, read e etc.

 

Novamente, obrigado pela resposta! :)

Link para o comentário
Compartilhar em outros sites

oi,se voce pretende usar C++,voce ainda pode usar vector<>,nao tem como voce alocar mais de 4 gb de memória de uma vez,pelo menos nao em um arquitetura 32..,chama a função maxsize do vector pra ver qual seria o tamanho maximo de alocação que o vector poderia fazer e faz  as contas com o tamanho do tipo que vai usar

Pra evitar o resize(dobrado) do container voce pode definir um tamanho fixo pra alocação usando reserve e quando terminar de ler um bloco com o tamanho selecionado em reserve,libera a memória anterior e realoca mais memória para ler a próxima parte do arquivo

Vai ser difícil voce achar uma biblioteca melhor implementada que a STL,os allocators otimizam bem principalmente pra tipos built-in

 

.

enfim,esse é só o jeito que eu faria,como o rjjj.disse é melhor pesquisar mais


quanto a paginação,em teoria se uma tarefa nao esta precisando de processamento,isso ja é feito automaticamente,então se voce executar uma parte do programa em uma thread e "desligar " essa thread pode ser que a paginação ja seja feita,eu nunca testei isso mas mesmo se funcionasse isso seria muito despendioso..

Link para o comentário
Compartilhar em outros sites

Obrigado pela resposta, rjjj.

 

Acho que fui descuidado com o exemplo! Eu ando trabalhando com matrizes 400.000.000x6, sendo que duas colunas são double e o restante posso usar como short (ou int). Pelas limitações, eu acabei pegando apenas uma das colunas - a mais importante -, que é uma aproximadamente 403.343.425x1 (vetor) de double, aproximadamente 3GB.

 

Você saberia me dizer se há alguma biblioteca que salva a matriz na memória do disco rígido e não na flash memory? Usando apenas ponteiros para apontar a um arquivo. Facilitando a manipulação, read e etc.

 

Novamente, obrigado pela resposta! :)

 

 

Você deve utilizar um banco de dados, uma complexa estrutura de dados que na verdade é um conjunto de arquivos. Com um Sistema de Gerenciamento de Banco de Dados, abreviado SGBD, apropriado, a manipulação e o armazenamento em disco de grandes quantidades de dados tornam-se muito eficientes em termos de memória e velocidade GbhmuXl.gif.

 

 

 

Um SGBD que considero muito eficiente é o MySQL, que também oferece bibliotecas para a linguagem C, permitindo o controle de bancos de dados MySQL através de programas feitos com ela F5Rua4D.gif.

 

 

 

No Windows e com o IDE Visual C++, isso consiste basicamente em escrever códigos com a include mysql.h, compilá-los com a biblioteca libmysql.lib e executá-los com a biblioteca libmysql.dll. Os arquivos específicos do MySQL mencionados vêm com o pacote do mesmo para Windows.

 

 

 

Espero ter ajudado GbhmuXl.gif.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!