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::out
foo2
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