[C con Clase] Punteros arrays y memoria.
Daniel Dagnino
ddagnino en gmail.com
Jue Ene 11 18:36:01 CET 2007
Buenas a todos,
antes de nada os comento que yo programaba en Fortran y me decidí a pasar a
C porque me dijeron que era mejor y a mi me interesa ya que trabajo haciendo
simulaciones numéricas. Lo que más me interesa ahora es el ahorro de memoria
cuando trabajo con matrices muy grandes. Mirando el manual de C con clase
he visto como definir un puntero (ej: **A) que me permite crear una matriz
a mitad de programa con la dimensión que corresponda (y así no tener que
hacer dos programas, uno para calcular la dimensión y otro para trabajar con
las matrices), sin embargo resulta que los punteros ocupan memoria (N*M
espacios de memoria adicionales para los punteros) que no es necesaria
definiendo la matriz al inicio del programa (ej: A[N][M]) como un array de
dos dimensiones. Así que mi pregunta es si un programa sencillo como
#include <iostream>
void funcion(int B[1][2]);
int main() {
int A[1][2];
A[0][0]=1; A[0][1]=2; A[0][2]=3;
A[1][0]=4; A[1][1]=5; A[1][2]=6;
funcion(A);
printf("A = %i %i %i \n",A[0][0], A[0][1], A[0][2]);
printf(" %i %i %i \n",A[1][0], A[1][1], A[1][2]);
getchar();
}
void funcion(int B[1][2]){
B[0][0]=9; B[0][1]=9; B[0][2]=9;
B[1][0]=9; B[1][1]=9; B[1][2]=9;
}
es más económico que
#include <iostream>
void funcion(int **B);
int main() {
int i,n,m,**A;
n=2; m=3;
A=new int *[n];
for (i=0;i<n;i++){A[i]=new int [m];}
A[0][0]=1; A[0][1]=2; A[0][2]=3;
A[1][0]=4; A[1][1]=5; A[1][2]=6;
funcion(A);
printf("A = %i %i %i \n",A[0][0], A[0][1], A[0][2]);
printf(" %i %i %i \n",A[1][0], A[1][1], A[1][2]);
for (i=0;i<n;i++){delete[] A[i];}
delete[] A;
getchar();
}
void funcion(int **B){
B[0][0]=9; B[0][1]=9; B[0][2]=9;
B[1][0]=9; B[1][1]=9; B[1][2]=9;
}
Si ahora tengo una matriz simétrica (A[i][j]=A[j][i]) y quiero ahorrar la
memoria repetida lo que tendré es una "matriz triangular". Mi pregunta
es si me creo una estructura para almacenar esto la estructura también
almacena punteros o no, ahorro memoria con la estructura o es la misma que
creando un puntero con la forma de la estructura.
Una ultima preguntita más. Como puedo medir el tamaño de una estructura y
sus punter para ver si me paso de la memoria RAM de mi ordenador.
Al que me conteste estas preguntas ya de antemano le doy un millón de
gracias (10e6*gracias).
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070111/a31f96bc/attachment.html>
Más información sobre la lista de distribución Cconclase