Вопрос:void update(char array[]){ int i,j; for(i = 0;i<NUM_OF_SUBARRAYS;i++){ char *subarray = array+(SUBARRAY_SIZE*i); for(j = 0;j<SUBARRAY_SIZE;j++){ subarray[j]=’d’; } //print_array(subarray); } }
Проблема: разделите массив на NUM_OF_SUBARRAYS и сделайте все, чтобы они меняли исходный массив с помощью ” d ” s в одной программе обработки (… затем в многопроцессной программе и сравнивали результаты)
Итак, это моя первая попытка решить это в одной программе процесса. если я делаю это так, разве это неэффективно, так как каждый суб-массив длиннее, чем достаточно?
Например,
ARRAY_SIZE=10 NUM_OF_SUBARRAYS=2
теперь каждый суб-массив имеет 10 элементов, но на самом деле 2 достаточно. Разве это не проблема с учетом желаемого ARRAY_SIZE 5M? если это так, что мне делать? Я как бы потерялся здесь, поэтому я был бы признателен, если бы вы коротко объяснили мне это.
Лучший ответ:
Полагаю, вы имели в виду SUBARRAY_SIZE вместо ARRAY_SIZE.
Вы, на ваш взгляд, достаточно 2, потому что в качестве отдельных элементов есть только d и . Ну, это не пункт упражнения. Скорее всего, это связано с арифметикой указателей с помощью массивов.
Идея состоит в том, чтобы разделить массив, как положить завершающий символ там, где он нужен, и просто инициализировать его. Это именно то, чего вам не хватает в вашей попытке.
Вот один из способов:
#include <stdio.h> #define NUM_OF_SUBARRAYS 2 #define SUBARRAY_SIZE 10 void update(char array[]) { int i,j; for(i = 0; i < NUM_OF_SUBARRAYS; i++) { char *subarray = array + (SUBARRAY_SIZE*i); for(j = 0; j < SUBARRAY_SIZE; j++){ subarray[j]=’d’; } subarray[SUBARRAY_SIZE] = ‘