我的编译C++;程序太小了。我怎样才能把它变大? 我有一个编译到9.5K的C++程序。我希望它超过1MB。我做了以下操作,将其填充到约18k,但要一直填充到1MB将非常困难
代码是不可访问的,但是由于编译器的优化,我不得不使它看起来是可访问的,因此bool发生了变化我的编译C++;程序太小了。我怎样才能把它变大? 我有一个编译到9.5K的C++程序。我希望它超过1MB。我做了以下操作,将其填充到约18k,但要一直填充到1MB将非常困难,c++,C++,代码是不可访问的,但是由于编译器的优化,我不得不使它看起来是可访问的,因此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 <
#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;
}
#包括“stdafx.h”
#包括
使用名称空间std;
void main(int argc,char*argv[])
{
布尔a=假;
cout也许您可以创建一个1MB大小的文件,并将所有信息读入某个变量或数据结构中
或者你可以创建一些数据结构,然后在一个循环中,向其中写入一堆垃圾。请注意,这可能会使你的程序明显变慢
int main(){}
char lol[1024*1024] = { 1 };
请注意,charlol[1024*1024];
是不够的,否则编译器只会告诉操作系统创建一个零填充区域。这样,程序中就会嵌入一个1MB的无意义区域堆。尝试以下方法:
char waste[1024*1024] = {1};
至少在我的TDM-GCC(在Win7上)上,输出要大1MB;如果您编写
char waste[1024*1024] = {0};
将对其进行优化(产生27kB)。有一个简单的解决方案:
您可以在.exe文件中添加一些数据文件。Windows会抱怨发布者未知,但在确认后执行程序不会出现问题。您可以通过在编译时静态分配内存来增大可执行文件的底纹。例如,只需添加:
static char padding[1024 * 1024] = {1};
这将静态地分配存储,而不是在运行时分配存储,如果忽略数组中第一个内存插槽的初始化值,就会出现这种情况。换句话说,如果没有将编译时初始化为非零值,数组将存储在对象文件,因此链接器只存储一个选项卡,向操作系统运行时指示它需要在执行时为数组分配内存,而不是在对象文件的.data
部分静态分配内存,这将反过来在可执行文件本身中为数组创建内存占用。使用静态可执行文件(-static
标志,用于gcc
)并添加系统包含,直到超过1MB。我想你也可以在Windows上这样做,但我不在Windows中编程,所以我可能会出错,但这里有一个链接似乎描述了如何做到这一点:你为什么要这样做?通常情况下,情况正好相反!你必须为microsoft工作!出于好奇:你到底为什么要编译程序ram要更大。此外,你有一个程序使用
编译到9.5k
,而不积极尝试使其尽可能小?只需编辑文件并在最后添加垃圾,windows不会仔细检查日历…不。那是两个多星期前的事了。我想他说的是二进制it本身,而不是内存程序在运行时占用空间。我很确定这两个因素都不会影响编译后的EXE,只影响运行时使用的内存/cpu。不是一个,而是一个和多个零。不。如果在初始化中只给出一个元素,它将被复制到整个数组中。我去掉了上面示例中的所有填充代码,并添加了是。现在编译为9.12k:(然后必须由VC++编译器为您进行优化。很抱歉。很抱歉,这是完全错误的。剩余的元素将被初始化为零。这也可以使用VS10进行优化。有什么特殊原因需要启用优化吗?@Dustin如果优化了,您仍然可以写出您的初始值zer list-您可以为此编写一个程序;)@Dustin和/或尝试实际访问数组成员(可能在main
中的循环中分配给所有成员)@Dustin:分配大数组,在循环中填充并打印,但不要让代码的分支在运行时实际执行。可能使用volatile bool exec_wastefill=false
。如果我没有弄错的话(已经有一段时间了)你可以用C++代码ST/Mt/CODE静态地编译C++的STD库,这确实是一个比Anthales更好的答案,对安泰勒没有任何冒犯。