小编Pau*_*ham的帖子

我怎样才能获得更好的分析?

我需要分析一个程序,看看是否需要对性能进行任何更改.我怀疑有需要,但先测量是要走的路.这不是那个程序,但它说明了我遇到的问题:

#include <stdio.h>
int main (int argc, char** argv)
{
  FILE* fp = fopen ("trivial.c", "r");
  if (fp)
  {
    char line[80];
    while (fgets (line, 80, fp))
      printf (line);

    fclose (fp);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是我用它做的:

% gcc trivial.c -pg -o trivial
% ./trivial
...
% gprof trivial gmon.out
Run Code Online (Sandbox Code Playgroud)

当然,这是一个微不足道的计划,但我认为它会在分析雷达上产生某种昙花一现.它没有:

                                  called/total       parents 
index  %time    self descendents  called+self    name       index
                                  called/total       children

                0.00        0.00       1/1           __start [1704]
[105]    0.0    0.00        0.00       1         _main [105]

-----------------------------------------------

  %   cumulative   self              self     total           
 time   seconds …
Run Code Online (Sandbox Code Playgroud)

c c++ macos gcc profiling

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

我可以让ungetc取消阻止阻止fgetc调用吗?

我希望在收到SIGUSR1时使用ungetc将'A'字符填充回stdin.想象一下,我有充分的理由这样做.

当调用foo()时,stdin中的阻塞读取不会被接收到信号时的ungetc调用中断.虽然我没想到这会按原样运作,但我想知道是否有办法实现这一目标 - 有没有人有建议?

void handler (int sig)
{
  ungetc ('A', stdin);
}

void foo ()
{
  signal (SIGUSR1, handler);

  while ((key = fgetc (stdin)) != EOF)
  {
    ...
  }
}

c stdin blocking

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

std :: cout << x之间的差异是什么?和std :: cout << x << std :: endl;?

我是编程的新手,我昨天开始自学,我已经得到了所有东西,但老实说,我不明白它们之间的区别

std::cout << x;
Run Code Online (Sandbox Code Playgroud)

std::cout << x << std::endl;
Run Code Online (Sandbox Code Playgroud)

没有人向我解释这一点,我要求保持安全.

c++

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

如何为我的C项目创建一个makefile?

这是我的c项目它是完全简单的linux shell我在linux中运行这个程序我想为我的程序make makefile.我想简单的makefile学习我如何才能实现它?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#define BUFFER_SIZE 1<<16
#define ARR_SIZE 1<<16
void sig_had(int signo)
{
    puts ("This is my signal handling ..!");

}
void parse_args(char *buffer, char** args, 
                size_t args_size)
{
    char *buf_args[args_size]; 
    char **cp;
    char *wbuf;
    size_t i, j;

    wbuf=buffer;
    buf_args[0]=buffer; 
    args[0] =buffer;

    for(cp=buf_args; (*cp=strsep(&wbuf, " \n\t")) != NULL ;){
        if ((*cp != NULL) && (++cp >= &buf_args[args_size]))
            break;
    }

    for (j=i=0; buf_args[i]!=NULL; i++){
        if(strlen(buf_args[i])>0)
            args[j++]=buf_args[i];
    }
}

int …
Run Code Online (Sandbox Code Playgroud)

c linux makefile

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

是否有一个C++ 11 strncmp替代品也可以执行?

我想在字符串中查找前缀.我一直在用这个:

if (s.substr (0, 7) == "prefix_")
  ...
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但它比相对慢strncmp,如此测试所示:

#include <iostream>
#include <chrono>
#include <string>
#include <string.h>

int main ()
{
  std::string s = "prefix_this is a passing test that will always match";

  auto t0 = std::chrono::high_resolution_clock::now ();
  for (int i = 0; i < 1000000; i++)
    if (s.substr (0, 7) == "prefix_")
      ;

  auto t1 = std::chrono::high_resolution_clock::now ();
  for (int i = 0; i < 1000000; i++)
    if (! s.compare (0, 7, "prefix_", 0, 7))
      ;

  auto …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

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

标签 统计

c ×3

c++ ×3

blocking ×1

c++11 ×1

gcc ×1

linux ×1

macos ×1

makefile ×1

profiling ×1

stdin ×1