转载出处:ACM输入优化
今天忽然遇见了一行很牛逼的代码:#pragma comment(linker, “/STACK:1024000000,1024000000”)
据说是手动加栈的,作为小白的我自然是只好各种查资料。
然后牵扯到了很多基础概念,C、C++、GCC、G++、把我搞得晕头转向,都分不清谁是谁了。
经查阅资料:
G++和C++都是C++语言的编译器,二者基本相同。
而GCC和C都是C语言编译器,而这差别实际也不大。
尽管C++规范中兼容绝大部分C的用法和几乎全部函数,但毕竟还是有更改的地方。
ACM模版
解决爆栈,手动加栈
这个关系一下子真的有些分不清你你我我,但是可以肯定的是当我们用C++时,可以用上边的这句代码进行手动加栈。(#pragma comment(linker, “/STACK:1024000000,1024000000”))
而C时,我们则要说另外一句代码:#pragma GCC optimize (“O2”)
我想,对于这个02你应该会有一丝的警觉,02表示一种状态,那么是不是还有其他的状态呢?
对,这个真有。GCC的#pragma优化主要分为四种 -O0 -O1 -O2 -O3
-O0 表示无优化状态
-O1 表示对代码进行了优化
-O2 表示减小目标文件大小
-O3 表示减小代码段及栈空间的大小
对部分代码可以去除优化:
#pragma GCC push_options
#pragma GCC optimize (“O0”)
或者也可以增加优化
#pragma GCC pop_options
另外要说的是,想要对代码进行进一步的优化,可以使用输入加速外挂,对C、C++均可行。