我需要分析一个程序,看看是否需要对性能进行任何更改.我怀疑有需要,但先测量是要走的路.这不是那个程序,但它说明了我遇到的问题:
#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) 我希望在收到SIGUSR1时使用ungetc将'A'字符填充回stdin.想象一下,我有充分的理由这样做.
当调用foo()时,stdin中的阻塞读取不会被接收到信号时的ungetc调用中断.虽然我没想到这会按原样运作,但我想知道是否有办法实现这一目标 - 有没有人有建议?
void handler (int sig)
{
ungetc ('A', stdin);
}
void foo ()
{
signal (SIGUSR1, handler);
while ((key = fgetc (stdin)) != EOF)
{
...
}
}
我是编程的新手,我昨天开始自学,我已经得到了所有东西,但老实说,我不明白它们之间的区别
std::cout << x;
Run Code Online (Sandbox Code Playgroud)
和
std::cout << x << std::endl;
Run Code Online (Sandbox Code Playgroud)
没有人向我解释这一点,我要求保持安全.
这是我的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) 我想在字符串中查找前缀.我一直在用这个:
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)