Questions tagged «c»

C是用于系统编程(OS和嵌入式),库,游戏和跨平台的通用编程语言。该标记应与ISO 9899标准(除非另有说明,最新版本9899:2018中定义的有关C语言的一般问题)一起使用-还要使用c89,c99,c11等标记特定于版本的请求。C与C ++截然不同,在没有合理理由的情况下,不应将其与C ++标记结合使用。

18
与Project Euler的速度比较:C,Python,Erlang,Haskell
我已经采取了问题#12从项目欧拉作为编程锻炼和比较我的(肯定不是最优的)实现在C,Python和Erlang和Haskell的。为了获得更高的执行时间,我搜索的第一个三角形数的除数大于1000,而不是原始问题中所述的500。 结果如下: C: lorenzo@enzo:~/erlang$ gcc -lm -o euler12.bin euler12.c lorenzo@enzo:~/erlang$ time ./euler12.bin 842161320 real 0m11.074s user 0m11.070s sys 0m0.000s 蟒蛇: lorenzo@enzo:~/erlang$ time ./euler12.py 842161320 real 1m16.632s user 1m16.370s sys 0m0.250s 带有PyPy的Python: lorenzo@enzo:~/Downloads/pypy-c-jit-43780-b590cf6de419-linux64/bin$ time ./pypy /home/lorenzo/erlang/euler12.py 842161320 real 0m13.082s user 0m13.050s sys 0m0.020s Erlang: lorenzo@enzo:~/erlang$ erlc euler12.erl lorenzo@enzo:~/erlang$ time erl -s …

19
以每种语言编译时,在C和C ++中都有效的代码能否产生不同的行为?
C和C ++有很多区别,并非所有有效的C代码都是有效的C ++代码。 (“有效”是指具有定义行为的标准代码,即不是特定于实现的/未定义的等。) 在任何情况下,使用每种语言的标准编译器进行编译时,在C和C ++中都有效的一段代码会产生不同的行为吗? 为了使之合理/有用(我试图学习一些实用的东西,而不是试图在问题中发现明显的漏洞),让我们假设: 与预处理器无关(这意味着不会与#ifdef __cplusplus,编译指示等发生冲突) 实现定义的任何内容在两种语言中都是相同的(例如,数值限制等) 我们正在比较每个标准的合理最新版本(例如C ++ 98和C90或更高版本)。 如果版本很重要,请说明每个标准的哪个版本会产生不同的行为。
664 c++  c 

4
如何达到每个周期4个FLOP的理论最大值?
在现代的x86-64 Intel CPU上,如何实现每个周期4个浮点运算(双精度)的理论峰值性能? 据我了解,在大多数现代英特尔CPU上,一个SSE 需要三个周期,一个SSE需要add五个周期mul(例如,请参见Agner Fog的“指令表”)。由于流水线,add如果算法具有至少三个独立的求和,则每个循环的吞吐量可以达到一个。由于对于打包addpd以及标量addsd版本和SSE寄存器都可以包含2 double的情况都是如此,每个周期的吞吐量可以高达2触发器。 此外,似乎(虽然我还没有看到任何这适当的文件)add的和mul的可并行给予的四个理论最大吞吐量每个周期触发器执行。 但是,我无法使用简单的C / C ++程序来复制该性能。我的最佳尝试导致每个循环约2.7翻牌。如果有人可以提供一个简单的C / C ++或汇编程序,该程序可以证明其最高性能,将不胜感激。 我的尝试: #include <stdio.h> #include <stdlib.h> #include <math.h> #include <sys/time.h> double stoptime(void) { struct timeval t; gettimeofday(&t,NULL); return (double) t.tv_sec + t.tv_usec/1000000.0; } double addmul(double add, double mul, int ops){ // Need to initialise differently otherwise …

13
C语言中的size_t是多少?
我size_t对C 感到困惑。我知道它是由sizeof运算符返回的。但是到底是什么呢?它是数据类型吗? 假设我有一个for循环: for(i = 0; i < some_size; i++) 我应该使用int i;还是size_t i;?
626 c  int  size-t 

30
如何检测无符号整数乘法溢出?
Наэтотвопросестьответына 堆栈溢出нарусском:МожнолинаязыкахC / C ++определитьцелочисленноепереполнение? 我在C ++编写一个程序来找到所有的解决方案一b = c ^,其中一个,b和c ^一起使用所有的数字0-9只出现一次。该程序循环了a和b的值,并且每次在a,b和a b上运行一个数字计数例程,以检查是否满足数字条件。 然而,当可以产生伪解一个b溢出整数限制。我最终使用如下代码检查了这一点: unsigned long b, c, c_test; ... c_test=c*b; // Possible overflow if (c_test/b != c) {/* There has been an overflow*/} else c=c_test; // No overflow 有没有更好的测试溢出方式?我知道有些芯片具有发生溢出时设置的内部标志,但我从未见过通过C或C ++访问它。 请注意,在C和C ++中,签名 int溢出是未定义的行为,因此您必须在没有实际引起它的情况下对其进行检测。有关添加之前的有符号的int溢出,请参阅在C / C ++中检测有符号的溢出。
618 c++  c  integer-overflow 



9
如何从进程内部确定CPU和内存消耗?
我曾经负责从运行的应用程序内部确定以下性能参数的任务: 可用虚拟内存总量 当前使用的虚拟内存 我的进程当前使用的虚拟内存 总可用RAM 当前使用的RAM 我的进程当前使用的RAM 当前使用的CPU百分比 我的进程当前使用的CPU百分比 该代码必须在Windows和Linux上运行。即使这似乎是一项标准任务,但在手册(WIN32 API,GNU文档)以及Internet上查找必要的信息还是花了我几天的时间,因为关于该主题的信息有太多不完整/不正确/过时发现在那里。 为了使其他人免于遭受同样的麻烦,我认为最好将所有分散的信息以及我通过反复试验发现的信息收集到一个地方。
593 c++  c  memory  cpu 


23
哪个更快:while(1)或while(2)?
这是一位高级经理提出的面试问题。 哪个更快? while(1) { // Some code } 要么 while(2) { //Some code } 我说这两者具有相同的执行速度,因为内部表达式while最终应求值为trueor false。在这种情况下,两个true条件都求和,并且条件内部没有额外的条件指令while。因此,两者将具有相同的执行速度,我更喜欢while(1)。 但是面试官充满信心地说:“检查您的基础知识。while(1)比更快while(2)。” (他没有测试我的信心) 这是真的? 另请参见:“ for(;;)”是否比“ while(TRUE)”更快?如果没有,人们为什么要使用它?


5
为什么“ while(!feof(file))”总是错误的?
我最近在很多帖子中都看到有人试图读取这样的文件: #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { char *path = "stdin"; FILE *fp = argc > 1 ? fopen(path=argv[1], "r") : stdin; if( fp == NULL ) { perror(path); return EXIT_FAILURE; } while( !feof(fp) ) { /* THIS IS WRONG */ /* Read and process data …
573 c  file  while-loop  eof  feof 




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.