У меня есть проект, который требует, чтобы я смоделировал сборщик мусора. Это использует алгоритм генерации в сочетании с методом маркировки и развертки. Пока я разработал структуру, как показано в коде. Проблема заключается в распределении памяти для кода. Теперь я использую векторы. Мне также нужно будет использовать указатель, чтобы указать на начало памяти и конец памяти. Я не знаю, как это сделать. Пожалуйста, помогите мне с этим. Вот мой код.инкрементное моделирование сбора мусора с использованием C++
#include <iostream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <limits>
#include <stdio.h>
#include <sstream>
#include <vector>
using namespace std;
using std::stringstream;
string pMem, comment, sGen, val,input,id,size,inits,incs;
double pmemSize =0;
char t[10], m[256],init[10],inc[10];
struct rootset {
double totSize;
double *rStrtPtr;
double *rEndPtr;
vector<double> physicalM; /* This is the size of physical memory i need to assign*/
struct generations {
double totSize;
const char *genStrtPtr;
const char *genEndPtr;
int numOfGen;
string genName;
struct object {
double objSize;
const char *objStrtPtr;
const char *objEndPtr;
string id;
char markBit;
char objPtr;
};
struct freeList {
double freeSpace;
int flNumb;
};
};
};
int main()
{
int pmemSize;
cout<<" ENter the size "<<endl;
cin >> pmemSize;
vector<rootset> pRootSet;
pRootSet.push_back(rootset());
pRootSet[0].totSize = pmemSize;
pRootSet[0].physicalM.reserve(pmemSize);
for (int s=0; s<pmemSize; ++s)
pRootSet[0].physicalM.push_back(s);
vector<double>::iterator it;
for(it = pRootSet[0].physicalM.begin(); it!= pRootSet[0].physicalM.end(); ++it)
cout <<"Printing it: " <<(*it)<<endl;
}
Моя проблема сейчас, как указать указатель * rStrtPtr и * rEndPtr; к первому местоположению физического М (физической памяти) ..? Подробности: Пользователь вводит количество физической памяти, которое должно быть зарезервировано для моделирования. Его в байтах. Для простоты только что используется int. Я буду менять его, чтобы удвоить его позже, так как распределение может увеличиться до 1 ГБ. Я создал вектор, называемый физическим. Это фактический блок физической памяти. Это позже будет разделено на поколения (обозначенные генерацией подструктуры). Когда пользователь указывает команду (abc = alloc(50B));
, мне нужно будет создать объект с именем abc в нижнем поколении и назначить для него 50 МБ его размера. (Эта часть я позабочусь позже). Любая помощь приветствуется ...
Изменить: Я пытался использовать эту строку в коде, но я получаю сообщение об ошибке:
pRootSet[0].rStrtPtr = &(pRootSet[0].physicalM);
error: cannot convert ‘std::vector<double>*’ to ‘double*’ in assignment
Edit: Fixed его. должен был инициализировать мой rStrtPtr как вектор.
Если мой дизайн нуждается в изменении, также дайте мне знать .. – Tuffy
Вот связанный с этим вопрос о переполнении стека. Надеюсь, вы найдете это полезным: http://stackoverflow.com/questions/16474393/memory-allocation-for-incremental-garbage-collection-simulation-in-c –
«Я не знаю, как это сделать. пожалуйста, помогите мне с конструированием этого »: в какой части вам нужна помощь в проектировании? –