我编译的C ++程序太小了。我怎样才能让它变大?

时间:2012-04-18 17:16:55

标签: c++

我有一个编译为9.5k的C ++程序。我希望它超过1MB。我做了以下操作将其填充到大约18k,但是这样做到1MB会很难。

代码无法访问,但由于编译器优化,我不得不让它看起来可以访问,因此bool会发生变化。

#include "stdafx.h"
#include <iostream>
using namespace std;

void main(int argc, char* argv[])
{
    bool a = false;
    cout << endl << "Passed parameters";
    for (int i = 0 ; i < argc ; i++)
    {
        if(i == 0)
        {
            cout << endl << "Run Path (Arg0): " << argv[i];
            a=true;
        }
        else
        {
            cout << endl << "Arg" << i << ": " << argv[i];
            if(a){a=false;}
        }
    }
    cout << endl << endl;
    system("pause");
    if (a){
    string pad1 = "padpadpadpadpadpadpadpadpadpadpadpadpadpadp1adpadpadpadpadpa";
    string pad2 = "dapdapdapdapdapdapdapdapd2apdapdapdapdapdapdapdapdapdapdapd";
    string pad3 = "dipdipdipdipdipdipdipdipdipdipd3ipdipdipdipdipdipdipdipdip";
    string pad4 = "dipdipdipdi4pdipdipdipdipdipdipdipdipdipdipdipdipdipdipdip";
    string pad5 = "dipdipdipd5ipdipdipdipdipdipdipdipdipdipdipdipdipdipdipdip";
    string pad6 = "dipdipdipd6ipdipdipdipdipdipdipdipdipdipdipdipdipdipdipdip";
    string pad7 = "dipdipdipd7i1pdipdipdipdipdipdipdipdipdipdipdipdipdipdipdip";
    string pad8 = "dipdipdip8dipdipdip1dipdipdipdipdipdipdipdipdipdipdipdipdip";
    string pad9 = "dipdipdipd9ipdipdipdipdip1dipdipdipdipdipdipdipdipdipdipdip";
    string pad10= "padpadpadpadpadpadpadpadpadpadp1adpadpadpadp1adpadpadpadpadpa";
    string pad11= "dapdapdapdapdapdapdapdapd2apdapdapdapdapdap1dapdapdapdapdapd";
    string pad12= "dipdipdipdipdipdipdipdipdipdipd3ipdipdipdipdipdipdip1dipdip";
    string pad13= "dipdipdipdi4pdipdipdipdipdipdipdipdipdipdipdipdipdi1pdipdip";
    string pad14= "dipdipdipd5ipdipdipdipdipdipdipdipdipd2ipdipdi1pdipdipdipdip";
    string pad15= "dipdipdipd6ipdipdipdip2dipdipdipdipdipdipdip1dipdipdipdipdip";
    string pad16= "dipdipdipd7ipdipdipdip2dipdipdipdipdip1dipdipdipdipdipdipdip";
    string pad17= "dipdipdip8dipdipdipdipdipdipd2ipdip1dipdipdipdipdipdipdipdip";
    string pad18= "dipdipdipd9ipdipdipdip1dipdipdipdipdipdi2pdipdipdipdipdipdip";
    string pad19= "padpadpadpadpadpadpadpadpadpadpad2padpadpadp1adpadpadpadpadpa";
    string pad20= "dapdapdapdapdapd2apdapdapd2apdapdapdapdapdapdapdapdapdapdapd";
    string pad21= "dipdipdipdipdipd2ipdipdi2pdipdipd3ipdipdipdipdipdipdipdipdip";
    string pad22= "dipdipdipdi4pdipdipdipd2ipdipdipdipdipdipdipdipdipdipdipdip";
    string pad23= "dipdipdipd5ipdip2dipdipdipdipdipdipdipdipdipdipdipdipdipdip";
    string pad24= "dipdipdipd6ipdipdipdi2pdipdipdipdipdipdipdipdipdipdipdipdip";
    string pad25= "dipdipdipd7i1pdipdipdipdipdipdip2dipdipdipdipdipdipdipdipdip";
    string pad26= "dipdipdip8dipdipdip1dipdipdip1dipdipdipdipdipdipdipdipdipdip";
    string pad27= "dipdipdipd9ipdipdipd1ipdip1dipdipdipdipdipdipdipdipdipdipdip";
    string pad28= "padpadpadpadpadpadpadpadp1adpadp1adpadpadpadp1adpadpadpadpadpa";
    string pad29= "dapdapdapdapdapdapdapdapd2apdapdapdapdapda1p1dapdapdapdapdapd";
    string pad30= "dipdipdipdipdipdipdipdipdipdipd3ipdipd1ipdipdipdipdip1dipdip";
    string pad31= "dipdipdipdi4pdipdipdipdipdipdipdi1pdipdipdipdipdipdi1pdipdip";
    string pad32= "dipdipdipd5ipdipdipdi1pdipdipdipdipdipdipdipdi1pdipdipdipdip";
    string pad33= "dipdipdipd6ipdipdipdip1dipdipdipdipdipdipdip1dipdipdipdipdip";
    string pad34= "dipdipdipd7ipdipdipdipdip1dipdipdipdip1dipdipdipdipdipdipdip";
    string pad35= "dipdipdip8dipdipdipdipdipdipdi1pdip1dipdipdipdipdipdipdipdip";
    string pad36= "dipdipdipd9ipdipdipdip1dipdipdipd1ipdipdipdipdipdipdipdipdip";}
    return;
}

6 个答案:

答案 0 :(得分:14)

试试这个:

char waste[1024*1024] = {1};

至少在我的TDM-GCC(在Win7上),输出大1 MB;如果你写

char waste[1024*1024] = {0};

它将被优化(产生27kB)。

答案 1 :(得分:8)

使用静态可执行文件(-static的{​​{1}}标志)进行编译并添加系统包含,直到超过1MB。我认为你可以用Windows做同样的事情,但我没有在Windows中编程,所以我可能错了,但这里有一个链接,似乎描述了如何:http://www.geekadmin.com/?p=34

答案 2 :(得分:4)

有一个简单的解决方案: 您可以将一些数据文件附加到.exe文件中。 Windows抱怨发布者不明,但确认后执行程序没有问题。

答案 3 :(得分:2)

也许你可以创建一个大小为1MB的文件,并将所有信息读入一些变量或数据结构。

或者你可以创建一些数据结构并在循环中写入一堆垃圾。请注意,这可能会使您的程序显着变慢。

答案 4 :(得分:2)

int main(){}
char lol[1024*1024] = { 1 };

请注意,char lol[1024*1024];是不够的,否则编译器只会告诉操作系统创建一个零填充区域。通过这种方式,程序中嵌入了1MB无意义的堆。

答案 5 :(得分:1)

通过在编译时静态分配内存,可以使可执行脚印变大。例如,只需添加:

static char padding[1024 * 1024] = {1};

这将静态分配存储而不是在运行时分配存储,如果省略数组中第一个内存插槽的初始化值,则会发生这种情况。换句话说,如果没有显式编译时初始化为非零值,则该数组存储在目标文件的.bss部分中,因此链接器仅存储一个选项卡以指示它需要的OS运行时在执行时为数组分配内存,而不是在目标文件的.data部分静态分配内存,这将在可执行文件本身中为数组创建内存占用。