我有一个项目要求我模拟增量垃圾收集。这使用世代算法结合标记和扫描方法。到目前为止,我已经设计了一个如代码所示的结构。问题在于为代码分配内存。我现在正在使用矢量。我还需要使用指针指向内存的开头和内存的结尾。我不知道该怎么做。请帮我设计一下。 到目前为止,这是我的代码。
#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;到物理M(物理内存)的第一个位置..?
详细信息:用户输入要为模拟保留的物理内存量。它以字节为单位。为简单起见,我刚刚使用了int。我将更改它以后加倍,因为分配可以达到1 GB。我创建了一个名为physicalM的向量。这是实际的物理内存块。这将在以后分为几代(由子结构生成表示)。当用户指定命令(abc = alloc(50B));
时,我将不得不在下一代中创建一个名为abc的对象,并为其分配50MB的大小。 (这部分我稍后会注意)。
任何帮助表示赞赏...
编辑:我尝试在代码中使用此行但出现错误:
pRootSet[0].rStrtPtr = &(pRootSet[0].physicalM);
error: cannot convert ‘std::vector<double>*’ to ‘double*’ in assignment
编辑:修正了它。必须将我的rStrtPtr初始化为矢量。
答案 0 :(得分:2)
第pRootSet[0].rStrtPtr = &(pRootSet[0].physicalM);
行
应为:
pRootSet[0].rStrtPtr = &(pRootSet[0].physicalM[0]);
或
pRootSet[0].rStrtPtr = pRootSet[0].physicalM.data();
或
pRootSet[0].rStrtPtr = &*(pRootSet[0].physicalM.begin());
pRootSet[0].rEndPtr = &*(pRootSet[0].physicalM.end()); // this will point to the first byte AFTER the end of the buffer.
我不确定为什么要将数据大小存储在double
中。 unsigned long
可以存储2 ^ 32 - 1(4294967295),即4GB。