Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

97
Vistas
Inicialice una matriz de 16 mb en C

Soy relativamente nuevo en 'C' y agradecería alguna información sobre este tema.

Básicamente, estoy tratando de crear una matriz de 16 MB y verificar si el contenido de la memoria se inicializa a cero o '\ 0' o algún valor de basura para un proyecto escolar.

Algo como esto:

char buffer[16*1024*1024];

Sé que hay un límite en el tamaño de la pila de programas y, obviamente, tengo una falla de segmentación. ¿Se puede hacer esto de alguna manera usando malloc()?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede inicializar la memoria con malloc así:

 #define MEM_SIZE_16MB ( 16 * 1024 * 1024 ) char *buffer = malloc(MEM_SIZE_16MB * sizeof(char) ); if (buffer == NULL ) { // unable to allocate memory. stop here or undefined behavior happens }

Luego puede verificar los valores en la memoria (tenga en cuenta que esto se imprimirá durante mucho tiempo):

 for (int i = 0; i < MEM_SIZE_16MB; i++) { if( i%16 == 0 ) { // print a newline and the memory address every 16 bytes so // it's a little easier to read printf("\nAddr: %08p: ", &buffer[i]); } printf("%02x ", buffer[i]); } printf("\n"); // one final newline

No olvides liberar la memoria cuando termines.

 free(buffer);
over 4 years ago · Santiago Trujillo Denunciar

0

Por supuesto:

 int memSize = 16*1024*1024; char* buffer = malloc( memSize ); if ( buffer != 0 ) { // check contents for ( i = 0; i < memSize; i++ ) { if ( buffer[i] != 0 ) { // holler break; } } free( buffer ); }
over 4 years ago · Santiago Trujillo Denunciar

0

Sí, probablemente necesitará hacer esto usando malloc() , y he aquí por qué:

Cuando se inicia cualquier programa (proceso... subproceso...) , se le proporciona una porción de memoria que utiliza para almacenar (entre otras cosas...) variables "locales". Esta área se llama "la pila ". Seguramente no será lo suficientemente grande para almacenar 16 megabytes.

Pero hay otra área de la memoria que cualquier programa puede usar: su " montón ". Esta área (como su nombre, "montón", pretende implicar...) no tiene una estructura inherente: es simplemente un grupo de almacenamiento y, por lo general, es lo suficientemente grande como para almacenar muchos megabytes. Simplemente malloc() el número de bytes que necesita, y free() esos bytes cuando haya terminado.

Simplemente defina un type que corresponda a la estructura que necesita almacenar, luego malloc(sizeof(type)) . El almacenamiento vendrá del montón. (Y para eso, básicamente, es el montón...)

Por cierto, hay una función de biblioteca llamada calloc() que reservará un área que es "cero conocido". Además, podría usar trucos inteligentes del sistema operativo para hacerlo de manera muy eficiente.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda