小编Сер*_*уло的帖子

带有std :: regex的巨大程序大小C++

我想用std::regex(标准正则表达式库)编译一个小的C++程序.
编译器:Fedora 21上的gcc/g ++ 4.9.2.

#include <string.h>
#include <iostream>
#include <regex>
using namespace std;
int main () {
cout << "Content-Type: text/html\n\n";
  std::string s ("there is a subsequence in the string\n");
  std::regex e ("\\b(sub)([^ ]*)");   // matches words beginning by "sub"
  std::cout << std::regex_replace (s,e,"sub-$2");
}
Run Code Online (Sandbox Code Playgroud)

没有编译程序是std::regex不可能的-std=c++11,所以在终端编译的合适指令是:

g++ -std=c++11 code.cpp -o prog
Run Code Online (Sandbox Code Playgroud)

我的主要问题是:源代码非常小,但为什么编译程序的最终文件大小如此之大:480千字节?

是因为受到影响-std=c++11吗?

发生了什么,如何减少最终二进制程序的大小?

UPD1.

使用-Os标志实际上是将std :: regex从480 KB减少到100-120 KB的程序大小的好方法.但奇怪的是,甚至使用std :: regexp优化文件比使用少量字符串源代码的C/C++程序更符合7-12 kylobytes.例如,可以在8.5 KB二进制文件中使用RE2 regexp库(在Fedora 21"yum install re2-devel"中)转换相同的正则表达式替换技巧:

#include <string.h>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ regex gcc c++11

4
推荐指数
1
解决办法
1140
查看次数

WebGL矩阵(mat4)表示法是否对应于数学矩阵表示法

OpenGL ES着色语言的文档(第5.11节)指出向量和矩阵乘法运算以正确的线性代数方式执行.线性代数教导我们如果我们将矩阵乘以向量,我们得到这样的结果:

1.0 1.0 0.0   -1.0   (1.0*-1.0)+(1.0*0.0)+(0.0*0.0)=-1.0
0.5 0.0 0.0 *  0.0 = (0.5*-1.0)+(0.0*0.0)+(0.0*0.0)=-0.5
0.0 0.0 0.0    0.0   (0.0*-1.0)+(0.0*0.0)+(0.0*0.0)= 0.0

1.0 1.0 0.0    0.0    1.0
0.5 0.0 0.0 *  1.0 =  0.0
0.0 0.0 0.0    0.0    0.0

1.0 1.0 0.0    1.0    1.0
0.5 0.0 0.0 *  0.0 =  0.5
0.0 0.0 0.0    0.0    0.0
Run Code Online (Sandbox Code Playgroud)

但是当我在WebGL顶点着色器中使用这个数学知识用于矢量乘法矩阵时,我面临着问题.当我尝试乘以上述矩阵的模拟时:

mat4 matrix=mat4(
1.0, 1.0, 0.0, 0.0,
0.5, 0.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0);
Run Code Online (Sandbox Code Playgroud)

三个垂直:红色(x = -1,y = 0,z = …

javascript shader opengl-es matrix webgl

1
推荐指数
1
解决办法
1126
查看次数

标签 统计

c++ ×1

c++11 ×1

gcc ×1

javascript ×1

matrix ×1

opengl-es ×1

regex ×1

shader ×1

webgl ×1