¿Cómo inicializar la matriz dinámicamente con un valor predeterminado?

Inicializaba una matriz (int corta sin firma) de tamaño 100000000 en C 4.3.2, y otra matriz de dos int de tamaño 1000000. Pero al enviar en línea al juez, estaba dando un error SIGSEGV .

Por lo tanto, decidí inicializar mi matriz dinámicamente con un valor predeterminado de 0, ya que agregar valor por bucle toma mucho tiempo.

¿Mi pregunta es cómo inicializar la matriz dinámicamente con un valor predeterminado?

Puede usar void *calloc(size_t nmemb, size_t size); Función para inicializar memoria con 0 ,

La función calloc() asigna memoria para una matriz de elementos nmemb de bytes de tamaño cada uno y devuelve un puntero a la memoria asignada. La memoria se pone a zero . Si nmemb o tamaño es 0 , entonces calloc() devuelve NULL o un valor de puntero único que luego se puede pasar con éxito a free() .

  calloc(number of elements, sizeof(type)); 

o también puede usar memset() explícitamente para inicializar la memoria asignada por la llamada malloc() .

Nota: calloc() tampoco es mágico, también usará un bucle en algún lugar para reemplazar la basura con todos los ceros.

Ver también: ¿Por qué malloc() + memset() es más lento que calloc() ?

No puedes eliminar el tiempo de inicialización, no importa lo que hagas. Lo mejor que puedes hacer es intentar optimizarlo . 2 técnicas vienen a la mente:

  • Utilice eficientemente su HW. Utilice accesos de memoria de tamaño nativo para inicializar el búfer. Por ejemplo, un bucle de architecture de más de 32 bits y escritura en fragmentos de 4 bytes.
  • Desenrolle el bucle para eliminar la sobrecarga de control.

El desenrollamiento probablemente se aplicará de todos modos al optimizar el comstackdor.

También puede intentar mover la sobrecarga de inicialización a una sección no crítica. Por ejemplo, puede usar variables estáticas que se inicializarán con cero al iniciar el progtwig. O, por el contrario, puede retrasar la inicialización hasta el primer uso (inicialización perezosa).