Puis-je toujours supposer que si ...mémoire programme Problème
int main()
{
...
foo1();
foo2();
foo3();
...
return 0;
}
que foo1() précédera toujours foo2() et foo2() précédera toujours foo3() à la fin du programme (en référence à l'abstraction le plus élevé d'achèvement)? Dans mon programme actuel, si foo2() et foo3() se produisent, cela dépend si foo1 est une fonction très "longue", c'est-à-dire s'il y a un géant pour la boucle dans foo1(), arriver à la fin du programme, foo2(), et foo3() ne se produisent pas. Dans mon programme, foo1() - foo3() accède à la même carte. f001() initialise tous les éléments utilisables dans la carte et foo2(), foo3() puis remplace les initialisations par les données d'alias lues dans les fichiers. Une raison pour laquelle cela se passe?
Voici les 2 fonctions, le reste du programme est sortof grand et hors sujet:
void loadDEADBEEF()
{
for (long long i=0; i<=268435888; i+=4)//268435888
{
MainMemory[i] = 3735928559;
HEXMainMemory[i] = "DEADBEEF";
}
}
void LoadMemory(string str)//load hex dump into memory
{
filecounter++;
vector<int> V;//temperary vector
vector<string> tempV;//temperary vector
ifstream inClientFile(str.c_str(),ios::in); //stream object
vector<string> words;
string word;
int offset=0;
if (!inClientFile) cerr << "File couldn't be opened" << endl;//test if instruction file can be opened
//fill string vector with all file values and determines length of program
while (inClientFile >> word)words.push_back(word);//capture raw code from file
const int wordCount=words.size();//determine most efficient sizing for vectors
tempV.reserve(wordCount);//size vector
for(int i=0; i<wordCount; i++)
{
if (i==0 && words[i].length()==10) tempV.push_back(words[i]);//include first word to obtain data offset (memory insertion point)
if (words[i].length()==8
&& words[i].find(".")==string::npos)
tempV.push_back(words[i]);//cut out undesired strings from vector
}
for(int y=2; y<10; y++) offset+=hexCharValue(tempV[0][y])<<(4*(9-y));//convert offset from hex to decimal
tempV.erase(tempV.begin());//delete offset from vector
V.resize(tempV.size());//resize vector
for(int j=0; j<tempV.size(); j++)//convert string hex to numerical decimal
{
for(int y=0; y<8; y++) V[j]+=hexCharValue(tempV[j][y])<<(4*(7-y));//4194608+4*
if (load_memory)
{
MainMemory.insert(mapType::value_type(4*j+offset,V[j]));//insert (location in memory,data)
HEXMainMemory.insert(pair<int, string>(4*j+offset,tempV[j]));
}
}
if(filecounter == 1) PC_start = offset-4;
}
Ainsi, la première fonction est « toto1() » et le second est « foo2() ». Voici la principale:
#include
...
typedef map<int, int> mapType;//format of map: (address, data)
typedef map<int, string> mapType2;//format of map: (address, data)
mapType MainMemory;
mapType2 HEXMainMemory;
...
int main(int argc, char **argv)
{
...
loadDEADBEEF();
LoadMemory("hello_1.txt");//reginfo
...
return 0;
}
Est-ce que 'foo1()' fait quelque chose avec plusieurs threads?S'il n'y a aucun threading, 'foo2()' et 'foo3()' seront exécutés séquentiellement après 'foo1()' comme terminé. S'il y a des discussions, tous les paris sont désactivés et la réponse est un peu plus compliquée. – mjschultz
Vous faites allusion à la mémoire dans le titre, mais votre question ne mentionne pas du tout l'utilisation de la mémoire. Est-ce qu'il manque quelque chose? –
Est-ce que foo1 déborde une variable globale qui affecte alors foo2 et foo3? Essayez un débogueur et placez un point d'arrêt à la fin de foo1 et commencez le traçage; voir ce qui se passe. – Rich