Подтвердить что ты не робот

Моя скомпилированная программа на C++ слишком мала. Как я могу сделать его больше?

У меня есть программа на С++, которая компилируется в 9.5k. Я бы хотел, чтобы это было более 1 МБ. Я сделал следующее, чтобы записать его примерно до 18 тыс., Но сделать это до 1 МБ будет сложно.

Код недостижим, но из-за оптимизации компилятора мне пришлось сделать его доступным, следовательно, 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;
}
4b9b3361

Ответ 1

Попробуйте следующее:

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

По крайней мере, на моем TDM-GCC (на Win7), выход на 1 МБ больше; если вы пишете

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

он будет оптимизирован (в результате получается 27kB).

Ответ 2

Скомпилируйте с помощью статического исполняемого файла (-static флаг для gcc) и добавьте систему, пока не получите более 1 МБ. Я думаю, что вы можете сделать то же самое с Windows, но я не программирую в Windows, поэтому я могу ошибаться, но здесь ссылка, которая, как представляется, описывает, как: http://www.geekadmin.com/?p=34

Ответ 3

Существует простое решение: Вы можете просто добавить файл данных в ваш .exe файл. Windows жалуется, что издатель неизвестен, но после подтверждения запуска программы без проблем.

Ответ 4

Возможно, вы могли бы создать файл размером 1 МБ и прочитать всю информацию в некоторой переменной или структуре данных.

Либо это, либо вы можете создать некоторую структуру данных и в цикле, напишите в нее кучу хлама. Обратите внимание, что это, вероятно, сделает вашу программу значительно медленнее.

Ответ 5

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

обратите внимание, что char lol[1024*1024]; недостаточно, так как в противном случае компилятор просто сообщает ОС создать нулевую область. Таким образом, в программе встроена куча бессмысленных 1 МБ.

Ответ 6

Вы можете сделать исполняемый стоп файл большим, статически распределяя память во время компиляции. Например, просто добавьте:

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

Это будет статически распределять хранилище, а не заставлять его выделяться во время выполнения, что и произойдет, если вы не учтете значение инициализации для первого слота памяти в массиве. Другими словами, без явной инициализации времени компиляции с ненулевым значением массив хранится в разделе .bss объектного файла, и, таким образом, компоновщик сохраняет только вкладку, указывающую на время выполнения ОС, которое ему нужно выделить память для массива во время выполнения, вместо того, чтобы выделять память статически в разделе .data объектного файла, что в свою очередь создаст след памяти для массива в самом исполняемом файле.