Причина ошибки сегмента в случае большого размера массива - PullRequest
0 голосов
/ 14 июня 2019

Я должен сделать симулятор rv32. Для этого я сейчас работаю над классом «память», который поможет мне отслеживать память.

Поскольку 32-разрядная версия, над которой я работаю, мне нужна структура данных для представления памяти. Концептуально память - это просто массив байтов, проиндексированный с использованием байтовых адресов, поэтому я использую массив для этого.

class memory {

 private:

  // TODO: Add private members here
  int * storage= new int [100000000];

 public:

  // Constructor
  memory(bool verbose);

  // Read a word of data from a word-aligned address.
  uint32_t read_word (uint32_t address);

  // Write a word of data to a word-aligned address.
  void write_word (uint32_t address, uint32_t data, uint32_t mask);

  // Load a hex image file and provide the start address for execution from the file in start_address.
  bool load_file(string file_name, uint32_t &start_address);

};

Когда я использую массив 'storage', он вызывает ошибку сегмента в операторе возврата, если адрес подобен 80000000.

uint32_t memory::read_word (uint32_t address) {
  //rounding up multiple
  if((address %4 )!=0){
    int remainder =(address)%4;
    address=address-remainder;
  }
  return (storage[address]); 

}
...