C++ 程序内存问题
我可以一直假设如果C++ 程序内存问题,c++,C++,我可以一直假设如果 int main() { ... foo1(); foo2(); foo3(); ... return 0; } 在程序完成过程中,foo1()总是在foo2()之前,foo2()总是在foo3()之前(指完成的最高抽象) 在我的实际程序中,foo2()和foo3()是否发生取决于foo1是否是一个非常“长”的函数,这意味着如果foo1()中有一个巨大的for循环,那么当我完成并到达程序末尾时,foo2()和foo3()不会发
int main()
{
...
foo1();
foo2();
foo3();
...
return 0;
}
在程序完成过程中,foo1()总是在foo2()之前,foo2()总是在foo3()之前(指完成的最高抽象)
在我的实际程序中,foo2()和foo3()是否发生取决于foo1是否是一个非常“长”的函数,这意味着如果foo1()中有一个巨大的for循环,那么当我完成并到达程序末尾时,foo2()和foo3()不会发生。在我的程序foo1()-foo3()中,访问相同的映射。f001()初始化映射和foo2()、foo3()中的所有可用元素,然后用从文件读取的别名数据替换初始化。为什么会这样
以下是两个函数,程序的其余部分比较大,与主题无关:
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;
}
void loadDEADBEEF()
{
对于(long)long i=0;i是,它们将始终以该顺序出现
是否愿意发布代码的结果,以显示它是如何不发生的?是的,它们将始终按该顺序发生
是否愿意发布代码的结果,以显示它是如何不发生的?假设您没有线程或任何东西,您可以始终假设foo1()将发生在foo2()之前,foo2()也将发生在foo3()之前
您可以使用调试器或控制台对此进行验证。请尝试将其放入每个fooX()
std::out假设您没有线程或任何东西,您可以始终假设foo1()发生在foo2()之前,foo2()也发生在foo3()之前
您可以使用调试器或控制台对此进行验证。请尝试将其放入每个fooX()
std::outfoo2
和foo3
将始终发生,除非调用之前的某个事件(如foo1
)导致程序退出(很可能是异常退出)。foo2
和foo3
将始终发生,除非调用之前的某个事件(如foo1
)导致程序退出(很可能是异常退出)。如果未执行foo2()
和foo3()
,则可能是foo1()
引发异常,或者退出应用程序。作为调试步骤,您可以尝试包装foo1()
在try…catch
块中。如果未执行foo2()
和foo3()
,则可能是foo1()
引发异常,或者退出应用程序。作为调试步骤,您可以尝试包装foo1()
在一个try…catch
块中。当foo1()有一个“大循环”时,您的程序是否干净地退出?您可以发布代码吗?大循环的情况可能会导致崩溃,因此foo2()和foo3()永远不会执行。当foo1()时,您的程序是否干净地退出有一个“大循环”?你能发布代码吗?大循环的情况可能会导致崩溃,因此foo2()和foo3()永远不会执行。没有真正的代码是很难帮助你的
使用“打印”输出来遵循您的代码(但需要帮助)
如果不使用线程foo2..fooN,则会发生异常退出。
要检查此项,请使用打印或其他方式“跟踪”程序所在的位置。如果没有真正的代码,将很难帮助您
使用“打印”输出来遵循您的代码(但需要帮助)
如果不使用线程foo2..fooN,则会发生异常退出。
要检查此项,请使用打印或其他“跟踪”你的程序在哪里。 这是调试器可能会有帮助的问题。我建议在战略位置放置断点以找出程序执行结束的地方。代码< > Foo1完成。我猜是程序由于调用<代码>出口<代码>或CR而退出Foe1的中间。灰烬。 < p>这是一个调试器可能会有帮助的问题。我建议在策略位置放置断点以找出程序执行结束的地方。一旦代码“>Foo1完成了。我猜是程序将在Foe1中间退出,这是因为调用了<代码>退出>代码>或崩溃。是<代码> Foo1。()
使用多线程执行任何操作?如果任何地方都没有线程,则foo2()
和foo3()
将在foo1()之后依次运行
已完成。如果有线程,则所有赌注都没有了,答案更复杂。你在标题中提到内存,但你的问题根本没有提到内存使用。是否缺少一些内容?foo1是否溢出了一些全局变量,从而影响foo2和foo3?请尝试调试器,并在foo1的末尾设置断点然后开始跟踪;看看会发生什么。代码中的一个附带说明是,MainMemory的值类型是int,因此可以保存最大值2^31-1,但您正在执行“MainMemory[i]=3735928559”你能澄清工作用例和“giant for loop”用例之间的区别吗?例如,代码的区别是什么?例如,for loop等的边界是foo1()
使用多线程做任何事情吗?如果任何地方都没有线程,foo2()
和foo3()
将在foo1()之后按顺序运行
已完成。如果有线程,则所有赌注都没有了,答案更复杂。你在标题中提到内存,但你的问题根本没有提到内存使用。是否缺少一些内容?foo1是否溢出了一些全局变量,从而影响foo2和foo3?请尝试调试器,并在foo1的末尾设置断点然后开始跟踪;看看会发生什么。代码中的一个附带说明是,MainMemory的值类型是int,因此可以保存最大值2^31-1,但您正在执行“MainMemory[i]=3735928559”你能澄清一下工作案例和“巨人换循环”案例之间的区别吗?例如,代码的区别是什么?例如,b
#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;
}
std::out << "This is foo1()" << std::endl