小编tec*_*rus的帖子

检查std :: string是否只有空格的有效方法

我刚刚和朋友讨论了检查std :: string是否只有空格的最有效方法.他需要在他正在进行的嵌入式项目中执行此操作,显然这种优化对他很重要.

我想出了以下代码,它使用了strtok().

bool has_only_spaces(std::string& str)
{
    char* token = strtok(const_cast<char*>(str.c_str()), " ");

    while (token != NULL)
    {   
        if (*token != ' ')
        {   
            return true;
        }   
    }   
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找有关此代码的反馈,也欢迎更有效的方法来执行此任务.

c++ string optimization whitespace

35
推荐指数
5
解决办法
4万
查看次数

获取进程的argc和argv的替代方法

我正在寻找替代方法来获取命令行参数argc并argv提供给进程,而无需直接访问传入的变量main().

我想使一类是独立的main(),这样argc并argv没有明确地传递给使用它们的代码.

编辑:有些澄清似乎是有序的.我有这门课.

class Application
{
  int const argc_;
  char const** const argv_;

public:
  explicit Application(int, char const*[]);
};

Application::Application(int const argc, char const* argv[]) :
  argc_(argc),
  argv_(argv)
{
}
Run Code Online (Sandbox Code Playgroud)

但我想一个默认的构造Application::Application(),有一些(最有可能)的C代码,拉动argc和argv从某处.

c++ linux windows bsd posix

21
推荐指数
6
解决办法
8203
查看次数

转1.5+:错误 - 导入运行时:不使用cgo或SWIG时不允许使用C源文件

我的程序与1.4.2完美搭配.安装完1.5后,我收到以下错误.

import runtime:不使用cgo或SWIG时不允许使用C源文件:atomic_amd64x.c defs.c float.c heapdump.c lfstack.c malloc.c mcache.c mcentral.c mem_linux.c mfixalloc.c mgc0.c mheap. c msize.c os_linux.c panic.c parfor.c proc.c runtime.c signal.c signal_amd64x.c signal_unix.c stack.c string.c sys_x86.c vdso_linux_amd64.c

该错误与程序无关.即使是"Hello world"程序也会抛出相同的错误.

c compilation build go

19
推荐指数
2
解决办法
8889
查看次数

gcc优化标志-O3使代码比-O2慢

我发现这个主题为什么处理排序数组比未排序数组更快?.并尝试运行此代码.而且我发现了奇怪的行为.如果我使用-O3优化标志编译此代码,则需要2.98605 sec运行.如果我用-O2它编译1.98093 sec.我尝试在同一环境中的同一台机器上运行此代码几次(5或6),我关闭所有其他软件(chrome,skype等).

gcc --version
gcc (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Run Code Online (Sandbox Code Playgroud)

那么请你能解释一下为什么会这样吗?我阅读gcc手册,我看到-O3包括-O2.谢谢你的帮助.

PS添加代码

#include <algorithm>
#include <ctime>
#include <iostream>

int main()
{
    // Generate data
    const unsigned arraySize = 32768;
    int data[arraySize];

    for (unsigned …
Run Code Online (Sandbox Code Playgroud)

c++ optimization gcc

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

如何将printf存储到变量中?

我想使用类似于C中printf所做的事情来存储格式化的字符串.

char *tmp = (char *)sqlite3_column_text(selectstmt, 2);
const char *sqlAnswers = printf("select key from answer WHERE key = %s LIMIT 5;", tmp);
Run Code Online (Sandbox Code Playgroud)

后者显然是一个错误.

c string string-formatting

17
推荐指数
3
解决办法
3万
查看次数

如何将CDN加速技术应用于图标?

通常的做法是使用CDN缓存javascript,css,font等等...但是这似乎并没有扩展到图标到相同的程度(可能因为每个网站都喜欢具有独特的外观和感觉?)

是否有广泛使用的CDN托管的图标集,这些图标集通常足以从CDN托管中提供显着的速度提升,并且可能已经使用该CDN从另一个站点预先缓存.

一个例子是:http: //cdnjs.cloudflare.com,其内容可浏览https://github.com/cdnjs/cdnjs/tree/master

它主机所在的一些图标集:

/ajax/libs/twitter-bootstrap/2.3.2/img/glyphicons-halflings.png
/ajax/libs/fatcow-icons/...
/ajax/libs/foundicons/3.0.0/svgs/...
/ajax/libs/aui/5.4.0/aui/css/icons/...
/ajax/libs/topcoat-icons/0.2.0/svg/...
/ajax/libs/jqueryui/1.10.3/css/base/images/...
*jqueryui is also hosted on ajax.googleapis.com and others but is a limited set
Run Code Online (Sandbox Code Playgroud)

和bootstrap halflings图标集一样:

http://netdna.bootstrapcdn.com/bootswatch/2.3.2/img/glyphicons-halflings.png
http://ajax.aspnetcdn.com/ajax/bootstrap/2.3.2/img/glyphicons-halflings.png
http://www.bootstrapcdn.com/twitter-bootstrap/2.3.1/img/glyphicons-halflings.png
Run Code Online (Sandbox Code Playgroud)

performance icons cdn css-sprites

16
推荐指数
3
解决办法
5315
查看次数

CUDA中的1D Min-convolution

我有两个数组,a和b,我想计算"min convolution"来产生结果c.简单的伪代码如下所示:

for i = 0 to size(a)+size(b)
    c[i] = inf
    for j = 0 to size(a)
        if (i - j >= 0) and (i - j < size(b))
            c[i] = min(c[i], a[j] + b[i-j])
Run Code Online (Sandbox Code Playgroud)

(编辑:更改循环从0开始而不是1)

如果min是一个和,我们可以使用快速傅立叶变换(FFT),但在最小的情况下,没有这样的模拟.相反,我想通过使用GPU(CUDA)尽可能快地制作这个简单的算法.我很乐意找到执行此操作的现有代码(或实现没有FFT的总和情况的代码,以便我可以根据我的目的调整它),但到目前为止我的搜索没有发现任何好的结果.我的用例将涉及大小在1,000到100,000之间的a和b.

问题:

  • 有效执行此操作的代码是否已经存在?

  • 如果我要在结构上自己实现这一点,那么CUDA内核应如何看待以最大限度地提高效率?我尝试过一个简单的解决方案,其中每个c [i]由一个单独的线程计算,但这似乎不是最好的方法.关于如何设置线程块结构和内存访问模式的任何提示?

optimization cuda signal-processing convolution

10
推荐指数
2
解决办法
2939
查看次数

编译器是否会优化返回具有固定大小数组的结构的函数?

假设我有一个struct带有固定大小数组成员的C/C++,例如:

#define SIZE 10000
struct foo{
  int vector_i[SIZE];
  float vector_f[SIZE];
};
Run Code Online (Sandbox Code Playgroud)

我想创建一个函数,它将返回一个实例foo,如:

foo func(int value_i, float value_f){
  int i;
  foo f;
  for(i=0;i<SIZE;i++) f.vector_i[i] = value_i;
  for(i=0;i<SIZE;i++) f.vector_f[i] = value_f;
  return f;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用以下方法调用函数:

foo ff = func(1,1.1);
Run Code Online (Sandbox Code Playgroud)

编译器会执行某种优化(即TCO)吗?

将可执行填写直接ff变量,或将填补第一f的func,然后所有值从复制f到ff?

如何检查是否执行了优化?

c c++ struct return-value return-value-optimization

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

汇编语言的自动代码重复数据删除?

我一直在阅读一些汇编编程视频,以便更好地理解如何手动优化编译后留下的*.s文件.gcc/g++ -S ... 其中一个主题是重构冗余代码,演示如何将冗余代码移动到自己的标记块以ret结束并用呼叫替换它.

视频中给出的示例是2个块,包含:

mov eax,power
mul ebx
mov power,eax
inc count
Run Code Online (Sandbox Code Playgroud)

它取而代之的是call CalculateNextPower和CalculateNextPower看起来像:

CalculateNextPower:
mov eax,power
mul ebx
mov power,eax
inc count
ret
Run Code Online (Sandbox Code Playgroud)

出于好奇,试图减少编译大小,我用-S和各种优化编译了一些C和C++项目,包括-Os,-O2,-O3,-pipe,-combine和-fwhole-program,并分析了结果*.s使用轻微修补(for .s文件)版本的duplo进行冗余的文件.只有-fwhole-program (现已弃用的IIRC)对消除文件中的重复代码有显着影响(我认为它的替换(-s)-flto在链接时会表现相似 - 大致相当于用-ffunction-sections -fdata-sections编译和--gc-sections链接)但仍然错过了大量的代码块.

使用duplo输出的手动优化导致随机C项目的大小减少约10%,并且当仅具有至少5个连续重复指令的连续块组件被重复数据删除时,随机C++项目中几乎减少30%.

我是否遗漏了一个编译器选项(甚至是一个独立的工具),在编译大小时会自动消除冗余程序集(包括其他编译器:clang,icc等等) 或者是否缺少此功能(原因?)?

如果它不存在,则可以修改duplo以忽略以'.'开头的行.要么 ';' (以及其他人?)并使用重复代码调用函数替换重复的代码块,但我对其他可直接使用编译器内部表示(最好是clang或gcc)的建议持开放态度.

编辑:我修补杜普洛识别重复组装块在这里,但它仍然需要在此刻手动重构.只要使用相同的编译器生成代码,就可以(但可能很慢)识别最大的重复代码块,将它们放在自己的"函数"块中,并用CALL替换代码到该块.

size assembly code-duplication compiler-optimization

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

什么是python的字典的等效PHP结构?

我找不到如何在PHP中编写空的Python结构/字典.当我在PHP中编写"{}"时,它给了我一个错误.Python字典的等效php编程结构是什么?

php python struct

7
推荐指数
2
解决办法
3794
查看次数

如果Thens比乘法和赋值更快吗?

我有一个简单的问题,假设我有以下代码,并且它以类似的方式重复10次,例如.

if blah then
    number = number + 2^n
end if
Run Code Online (Sandbox Code Playgroud)

评估会更快吗?

number = number + blah*2^n?
Run Code Online (Sandbox Code Playgroud)

这也带来了问题,你可以将一个布尔值乘以一个整数(虽然我不确定从2 ^ n返回的类型,是整数还是unsigned..etc)?(我在Ada工作,但是我们可以尝试概括一下吗?)

编辑:对不起我应该澄清我正在考虑2的力量n,并且我把c放在那里因为我对将来自己的学习感兴趣如果我遇到c中的这个问题并且我认为还有更多的c那些程序员在这些板上然后Ada(我假设你知道这意味着什么),但是我目前的问题是Ada语言,但问题应该是相当语言独立的(我希望).

c optimization ada branch-prediction

6
推荐指数
3
解决办法
4636
查看次数

数学背后的gcc9 +模数优化

背景

当我偶然发现gcc trunk中的一个新优化(将是版本9.x)时,我正在使用c中的素数进行操作,该优化将模数比较优化为0整数乘法并使用幻数进行比较.换句话说x%prime==0就变成了x*Magic_mul<=Magic_cmp

_Bool mod(unsigned x){return x % Constant == 0;}

mod:
  imul edi, edi, Magic_mul
  cmp edi, Magic_cmp
  setbe al
Run Code Online (Sandbox Code Playgroud)

细节

基于看到asm输出,它对所有整数进行了这些优化(好吧,至少是素数)我将它们转换为十六进制以帮助查看模式,但目前还不是很明显.

//32bit examples for _Bool mod_n(unsigned x){return x%n==0;};
//note: parameter is unsigned but it becomes a signed multiply
x%3==0;  // x*0xAAAAAAAB <= 0x55555555
x%5==0;  // x*0xCCCCCCCD <= 0x33333333
x%7==0;  // x*0xB6DB6DB7 <= 0x24924924
x%11==0; // x*0xBA2E8BA3 <= 0x1745D174
x%13==0; // x*0xC4EC4EC5 <= 0x13B13B13
x%17==0; // x*0xF0F0F0F1 <= 0x0F0F0F0F
x%19==0; // x*0x286BCA1B <= 0x0D79435E
x%23==0; // …
Run Code Online (Sandbox Code Playgroud)

c math compiler-optimization modulus

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

是否有一种安全的方法来指定对象的值可能是未初始化的,因为它从未被使用过?

免责声明:以下是纯粹的学术问题; 我将此代码与任何生产系统保持至少100米的距离.这里提出的问题是任何"现实生活"案件都无法衡量的问题.

考虑以下代码(godbolt链接):

#include <stdlib.h>

typedef int (*func_t)(int *ptr); // functions must conform to this interface

extern int uses_the_ptr(int *ptr);
extern int doesnt_use_the_ptr(int *ptr);

int foo() {
    // actual selection is complex, there are multiple functions,
    // but I know `func` will point to a function that doesn't use the argument
    func_t func = doesnt_use_the_ptr;

    int *unused_ptr_arg = NULL; // I pay a zeroing (e.g. `xor reg reg`) in every compiler
    int *unused_ptr_arg; // UB, gcc zeroes (thanks …
Run Code Online (Sandbox Code Playgroud)

c gcc clang micro-optimization

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