小编Mar*_*les的帖子

最简单的方法来模拟最大CPU负载?

我必须测试嵌入式计算机的最极端条件下产生的热量和电流消耗,为此我想编写一个程序,尽可能多地使用CPU资源的四核CPU(每个核心一个线程).你能提出一些非常耗费CPU的东西吗?

我必须在ARMv7上为Linux执行此操作,并且语言是C或C++,我发现的其他示例要么是针对Windows,要么是针对C/C++.

我在我的Windows计算机上尝试这样的东西,显然它正在工作,因为它需要12%的总CPU功率(这是每个核心i7四核2线程):

float x = 1.5f;
while (1)
{
    x *= sin(x) / atan(x) * tanh(x) * sqrt(x);
}
Run Code Online (Sandbox Code Playgroud)

我不知道怎么做多线程.

c simulation multithreading cpu-usage

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

想要使用整数数学将int缩放为int

我在SDCC 2.8.0上,因此内存和代码大小非常有限.假设我的输入值介于0到127之间,我想将其缩放到20 - 100.通常我会这样做:

int scale(int input, int min, int max)
{
 // assuming max is always greater than min
 float range = (float)max - (float)min;
 int output = min + int((range / 127.f) * (float)input);
 return output;
}
Run Code Online (Sandbox Code Playgroud)

通过呼叫scale(64, 20, 100);我得到60,这正好是20到100之间的一半.

如何在不使用浮点数的情况下完成此操作?任何比特变幻魔术?

floating-point scaling integer sdcc

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

将struct复制到vector

假设我有各种数据类型的结构,我想复制向量中的每个字节.我这样做:

vector<unsigned char> myVector;                                     // get a vector
unsigned char buf[sizeof myStructure];                              // get an array
memcpy(&buf, &myStructure, sizeof myStructure);                     // copy struct to array
myVector.insert(myVector.begin(), buf, buf + sizeof myStructure);   // copy array to vector
Run Code Online (Sandbox Code Playgroud)

有没有最快的方法允许我将结构复制myStruct到vector myVector而不通过数组buf

c++ struct vector

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

在不使用regexp的情况下解析HTTP请求

我正在使用正则表达式来分隔HTTP请求的字段:

GET /index.asp?param1=hello&param2=128 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

这条路:

smatch m;
try 
{ 
    regex re1("(GET|POST) (.+) HTTP"); 
    regex_search(query, m, re1); 
} 
catch (regex_error e) 
{ 
    printf("Regex 1 Error: %d\n", e.code()); 
}
string method = m[1]; 
string path = m[2];

try 
{ 
    regex re2("/(.+)?\\?(.+)?"); 
    if (regex_search(path, m, re2)) 
    { 
        document = m[1]; 
        querystring = m[2];
    }
} 
catch (regex_error e) 
{ 
    printf("Regex 2 Error: %d\n", e.code()); 
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这段代码适用于MSVC,但不适用于GCC 4.8.2(我在Ubuntu Server 14.04上使用).你能否建议使用普通的std :: string运算符分割该字符串的不同方法?

我不知道如何在不同的元素中拆分URL,因为查询字符串分隔符'?' 字符串可能存在也可能不存在.

c++ string parsing httprequest

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

在读取大文件时杀死std :: thread

我有一个std::thread函数调用fopen将一个大文件加载到一个数组中:

void loadfile(char *fname, char *fbuffer, long fsize)
{
  FILE *fp = fopen(fname, "rb");
  fread(fbuffer, 1, fsize, fp);
  flose(fp);
}
Run Code Online (Sandbox Code Playgroud)

这称为:

std::thread loader(loadfile, fname, fbuffer, fsize);
loader.detach();
Run Code Online (Sandbox Code Playgroud)

在某些时候,我的程序中的某些东西想要停止读取该文件并要求另一个文件.问题是,当我删除fbuffer指针时,loader线程仍在继续,并且我得到了一个存在异常的竞争条件.

我该如何杀死那个帖子?我的想法是检查是否存在,fbuffer并可能分成fread小块:

void loadfile(char *fname, char *fbuffer, long fsize)
{
  FILE *fp = fopen(fname, "rb");
  long ch = 0;
  while (ch += 256 < fsize)
  {
     if (fbuffer == NULL) return;
     fread(fbuffer + ch, 1, 256, fp);
  }
  fclose(fp);
}
Run Code Online (Sandbox Code Playgroud)

这会减慢文件的读取速度吗?你有更好的主意吗?

c++ multithreading fopen c++11

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

C++如何实现非常快速的操作

我在VC++ 2013,Windows 7-64,Intel i7 3.6 GHz.我想测量非常快速的数学运算的执行时间,例如我希望将标准fabsf()函数的性能与替代的"更快"方法或标准tanh()与Pade近似等进行比较.

问题是这些操作太快了,即使我运行它们数十万次,我总是在基准测试的结束和开始之间获得0毫秒.

我试着用纳秒来获得时间,<chrono>但是它被四舍五入到十分之一毫秒,而不是真正的纳秒,所以在我的基准测试中我仍然得到0纳秒.

你能提供一些代码片段,我可以用它来运行我的基准测试吗?

这是我的:

#include <vector>
#include <chrono>
#include <ctime> 
using namespace std;

// 1/RAND_MAX
#define RAND_MAX_RECIP      0.00003051757f

int _tmain(int argc, _TCHAR* argv[])
{
    srand (static_cast <unsigned> (time(0)));

    // Fill a buffer with random float numbers
    vector<float> buffer;
    for (unsigned long i=0; i<10000000; ++i)
        buffer.push_back( (float)rand() * RAND_MAX_RECIP );

    // Get start time
    auto start = std::chrono::high_resolution_clock::now();

    for (unsigned long i=0; i<buffer.size(); ++i)
    {
        // do something with …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point benchmarking c++-chrono

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

c ++ std :: future在单独的核心上运行每个函数

它是在四核Cortex A9 ARMv7(Linux和gcc 4.8.2)上运行的实时音频应用程序,这是处理实际音频的部分(通过调用其他功能)并被发送到音频驱动程序:

struct STEREOOUT
{
    std::vector<float> L;
    std::vector<float> R;
};

STEREOOUT ProcessEngine(int e, unsigned int sf)
{
    STEREOOUT out;
    for (unsigned int s=0; s<sf; ++s)
    {
        float l, r; 
        engine[e]->Process(l, r);
        out.L.push_back(l);
        out.R.push_back(r);
    }
    return out;
}

// This is the main audio loop callback!
int AudioProcess(void *outputBuffer, unsigned int sampleFrames)
{
    float *buffer = (float*)outputBuffer;
    unsigned int s(0);

    STEREOOUT e0 = async(launch::async, &ProcessEngine, 0, sampleFrames).get();
    STEREOOUT e1 = async(launch::async, &ProcessEngine, 1, sampleFrames).get();

    for (; s<sampleFrames; ++s)
    { …
Run Code Online (Sandbox Code Playgroud)

c++ future multiprocessing

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

将向量作为函数参数传递

在VS 2013中,我可以做到

void myFunction(vector<int> myVector)
{
  // Do something with myVector
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下功能:

void anotherFunction()
{
  myFunction({1, 25, 33, 45, 80});
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用Xcode 3.5(GCC 4.2)编译此代码,我会收到错误" '{'token'之前的预期主表达式 "以及" 对于调用anotherFunction(void)没有匹配函数 ".

是否有一个优雅的解决方法,我可以使用GCC 4.2了解我传递一个常量向量作为函数参数?

c++ xcode gcc function vector

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

传递const引用:性能提升?

这之间是否有任何有价值的性能差异:

int myFunction(const int &a) { return 2 + a; }
Run Code Online (Sandbox Code Playgroud)

还有这个:

int myFunction(int a) { return 2 + a; }
Run Code Online (Sandbox Code Playgroud)

据我所知,第二种方法将变量的副本作为参数传递给新寄存器,这在asm代码中需要更多的指令.在这种情况下,这个函数被称为千次,性能至关重要,传递const引用而不是变量更好吗?

c++ performance const reference function

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

C++向量指针:指向变量指针的常量向量?

我有两个常量向量:

const vector<int> A = { 0, 12, 23, 34, 45, 56, 67, 78, 89 };
const vector<int> B = { 13, 24, 35, 46, 57, 68, 79 };
Run Code Online (Sandbox Code Playgroud)

我想像这样在他们之间切换

int main()
{
  vector<int> myVector;

  if ( something happens )
    point myVector to A;
  else
    point myVector to B;

  while ( a condition )
  {
    do something with ( myVector );
  }
}
Run Code Online (Sandbox Code Playgroud)

我如何指向矢量AB我应该如何声明myVector

c++ pointers vector

-2
推荐指数
1
解决办法
165
查看次数