c有关的问题


如何在debian/ubuntu上编写系统调用

我正在尝试编写自己的系统调用。它只会返回当前时间。我知道我应该做什么的概念,我确实经历了几个这样的链接:
实现一个系统.


奇怪的c左移

我试图在c中做左移位。
Int a = 32;
Printf ("% d \ n",~ 0 << a);
Printf ("% d \ n",~ 0 << 32);
所以我运行 2 printf() 以上,结果是不同的。我使用dev-C + +。.


访问任意地址,不获取segfault

据我所知,每当程序试图访问未经授权的内存时,都会引发segfault。
下面的代码为p分配一个one-int内存块,然后尝试在某个un.


如何在二进制代码中查看编译后的C代码?

编译器就是接受这段代码,并将其翻译成机器代码
如何在二进制代码中编译后看到原始的C代码?


Visual Studio 2017 是否完全支持C99?

Visual Studio的最新版本已经改进了对c99 的支持。最新版VS2017 现在是否支持C99 的全部?
如果没有,C99 还有哪些功能缺失?


C getline函数未按指定读取行

我需要getline() 来读取我的浏览器发送到我正在编程的web服务器的请求头。这是getMessage函数,它应该执行该任务:
Char * getMessage(int fd) {
文件 *


C中的stdarg和printf()

<Stdarg.h> 头文件用于使函数接受未定义数量的参数,对吗?
因此,<stdio.h> 的printf() 函数必须使用 <stdarg.h> 接受avariable


“Do {. } while (0)” 在内核代码中到底做了什么?

可能的重复:
当我们定义一个宏时,do while(0) 有什么用?
为什么有时在C/C宏中存在无意义的do/while和if/else语句?
C多行宏: do/w.


获得比某个数字少 2 的幂的最快方法是什么?

我正在使用这个逻辑:
While ((chase<<( n))< num) ;
其中chase = 1,n = 0 最初,num是我想找到的 2 的幂小于它的值。
循环后I


编译gcc的问题。链接时的s代码

第一次在这里,我运行Kali linux 64 位,我是一个linux新手和一个新的ASM.所以我在C中拉了一个代码,它工作得非常好.下面是代码:
# Include <stdio.h>
#


GDB / GNU程序集: test % esi,% esi返回not equal?

我正在做作业。我们得到了一个预编译的二进制文件,我们必须使用gdb来获取汇编转储,遍历数据结构,查看存储在内存中的值等,以便拼图.


整数的位反转,忽略整数大小和字节排序

给定一个整数typedef:
Typedef unsigned int类型;

Typedef无符号长类型;
我有以下代码来反转整数的位:
TYPE max_bit = (TYPE)-1;
Void reverse_int_setup.


整数大小的变化?

可能重复:
C中的整数大小取决于什么?
为什么整数的大小在 16 位编译器上是 2 个字节,在 32 位编译器上是 4 个字节?此外,它与操作系统有什么关系?
Printf (".


从K & R的书中解释这个malloc的实现

这是Kernighan和Ritchie关于C的书的摘录。它展示了如何实现一个版本的malloc。虽然评论很好,但我很难理解它。有人能


Pow函数在这种情况下如何工作?

# Include <stdio.h>
# Include <math.h>
Int main()
{
Int i = 11;
Printf ("% d ^ 2 = % d \ n",i,(int)pow(i,2 ));
Getchar ();
返回 0;
}
在这种情况下,我没有得到 121,而是得到了 120。什么.


Realloc在C中的实现

Int getmin(int a,int b)
{
返回a<b?a:b;
}
Void * 重新分配 (void * ptr,size_t大小) //以字节为单位的size_t
{
Void * newptr;
Int msize;
Msize = getsize(ptr);
Msize = getmin(.


发出DIV指令,而不是 _ _ udivti3

请考虑以下代码:
无符号长长div (无符号长a,无符号长b,无符号长c) {
Unsigned _ _ int128 d = (unsigned _ _ int128)a *(unsigned _ _ int128)b;
Ret.


最大不能超过 50%。矩阵乘法的理论性能

问题
我正在学习HPC和代码优化。我试图在Goto的开创性矩阵乘法论文中复制结果 ( http://www.cs.utexas.edu/users/pingali/CS378/2008sp/papers/


如何在C中打印double数据类型

为什么在C中,当我用 % f打印一个double类型变量时,它显示 8.000000… 但这不是我想要的结果。我想要一个像 8.5000 这样的结果,我该如何实现呢?
Int main(){
Int i,j;
……


什么时候使用valloc() 而不是malloc() 更合适?

C (和C) 包括一个动态内存分配函数家族,其中大部分是直观命名的,很容易向对内存有基本了解的程序员解释。Malloc () 简单


Malloc分配内存失败

我正在写一个C代码来解决欧拉方程。我的代码在集群上运行得非常好,但在我的pc上却不行。似乎是一个问题与malloc()。它无法分配请求的记忆.


如何获取参数整数在被叫?

我有以下代码 (caller.c):
# Include <stdio.h>
Extern int callee(int);
Int main(int argc,char * argv[]){
被叫方 (4);
返回 1;
}
和 (被叫方):
。Globl callee
被叫方:
Po.


C: 更快地访问查找表?

我有一段代码,一次跟踪 4 个sines。
我的原始代码是每帧大约 12000 sin() 函数调用,并以 30 fps运行。
我尝试通过生成查找来优化它


大于小于C中浮点的比较

请考虑以下代码:
浮动x = 0.1;
If (x> 0.1){
Printf ("if");
}
现在当我检查相等时,它被解释为x正在被转换为double通过填充 0s在最后,但 0.1 o.


优化我!(C,性能) -- 位游手好闲问题的后续

感谢一些非常有用的stackOverflow用户在Bit twidling: 设置了哪个位?,我已经构建了我的功能 (张贴在问题的末尾)。
任何建议-即使是小建议-


X86_64 linux上C程序中的内联汇编

我已经建立了一个简短的程序写在C和内联汇编在我的linux x86_64。它应该写一个字符串到stdout。我在网上的一篇文章中找到了它:
Int write_call( int fd,const.


C中的Malloc语法

在书中我读到malloc的语法是malloc(sizeof(int)),但在一个双向链表程序中我看到以下内容:
Newnode =(struct node *)malloc(sizeof(struct node))
什么是 (str.


Realloc () 悬挂指针和未定义的行为

当你释放内存时,指向该内存的指针会发生什么?它们会立即失效吗?如果它们后来再次生效会发生什么?
当然,通常的poin案例.


C.编译时的宏评估

我需要一个在编译时评估的宏,类似于:
# Define FIND_RANGE(x) \
如果x>16 \
32 \
Elif x>8 \
16 \
Elif x>4 \
8 \
Elif x>2 \
4 \
Elif x>1 \
2 \
Else \
1 \


是sizeof(enum) = = sizeof(int),总是?

是sizeof(enum) = = sizeof(int),总是?
或者是编译器依赖?
是不是说错了,因为编译器是针对字长 (内存对齐) 优化的,ie y int是特定字长


计算C中的时间差

我尝试使用 <time.h> 库,但似乎 <time.h> 并不真正支持早于 1900 的时间,也可能比x年更远。
我在这里的问题是:
……


“& R” 与 “r” 有什么不同?

GCC的内联汇编程序识别声明符 = r和 = & r。这些对我来说很有意义: = r让汇编程序重用输入寄存器进行输出。
然而,GCC的内联汇编程序也识别.


在中断服务例程中会发生什么?

有人能向我解释一下中断服务例程内部发生了什么吗 (尽管这取决于特定的例程,但一般的解释就足够了)?这一直是我的黑匣子。


对数时间并行减少

给定n个部分总和,可以在log2 并行步骤中求和所有部分总和。例如,假设有八个线程有八个部分和: s0,s1,s2,s3,s4,s5,s6,s7。这个cou.


从unit8_t缓冲区到结构的指针类型转换

我试图将uint8_t缓冲区类型转换为具有如下位字段的结构。
# Include <stdio.h>
# Include <inttypes.h>
Struct msg {
Uint64_t字段: 56;
};
空主 ()
{
Uint8_t b.


SSE矩阵-矩阵乘法

我有麻烦用C中的SSE做矩阵-矩阵乘法。
以下是我到目前为止得到的:
# 定义N 1000
Void matmulSSE(int mat1[N],int mat2[N],int result[N]) {
Int i,j,k;


一个C程序使系统崩溃

几天前,我接受了一次面试,我被要求用c语言编写一个程序,使系统崩溃/关闭系统。不用说,我觉得自己很笨,不知道该怎么做.


使用MASM生成对象文件并将其与MSVC对象文件链接

我想用一个生成的对象文件链接一个只包含一个函数的程序集文件。我想知道如何创造。MASM中的obj文件,我还需要知道如何创建这样一个


在C中,对于 32 位机器和 64 位机器,long的大小是多少?

C中的long对于 32 位平台的大小为 4 字节,对于 64 位平台的大小为 8 字节,这是正确的吗?


为什么这个函数序言中没有 “sub rsp” 指令,为什么函数参数存储在负rbp偏移量?

这就是我通过阅读一些内存分割文档所理解的: 当一个函数被调用时,有一些指令 (称为函数序言) 将帧指针保存在堆栈上,.


使用int64x2_t向量将低 64 位复制到高 64 位?

我找不到我需要的霓虹灯仪器。我有一个 128 位值作为int64x2_t,我需要将低 64 位复制到高 64 位。我还需要将高 64 位复制到低.


为什么sum1 = 46 和sum2 = 48

在下面提到的代码中,当运算符从左到右优先时,sum1 变量得到 46 作为答案。但是在sum2 中,答案得到 48,它的优先级是从右到左。为什么那些ans.


增加和增加战俘

想法是这样的 :( 0),它工作完美,除了 5,当我给 5 它计算错误。我不明白为什么?
Int i,a,n;
Int sum = 1;
Scanf ("% d",& a);
Scanf ("% d",& n);
……


书CSAPP中的汇编代码

在书CSAPP,3.7.5 本地存储在寄存器中,有一个调用函数:
长P (长x,长y)
{
长u = Q(y);
长v = Q(x);
返回u v;
}
和生成的程序集.


什么决定整数的大小?

Sizeof (int) 在我的Dev Cpp上显示 4,即使它在 64 位机器上运行。为什么它不考虑底层HW并显示 8 呢?另外,如果我编译环境也变成 64 位.


为什么在此代码中GlutPostRedisplay和sleep函数不起作用?

我已经尝试在这个项目中实现usb和cpu之间的数据传输。数据传输显示为从计算机的一个组件移动到另一个组件的小矩形。
在.


什么是C中的未定义行为?

什么是C中的未定义行为?
我正在使用GCC编译器。在某些情况下,我得到正确的值,虽然程序的输出应该是未定义的。我运行了几次那些程序。但是.


C: 提高使用重sin() 函数的性能

我有一个C函数,根据经过的时间计算 4 个正弦的值。使用gprof,我认为这个函数使用 100% (100.7% 确切地说是lol) 的CPU时间。
虚空
Update_sines (void.


使用GCC的Nasm内联汇编

在我的项目中,我需要使用内联汇编,但它需要是Nasm,因为我对GAS不太熟悉。
我的尝试:
Void DateAndTime()
{
Asm
(.L1: mov al,10 ;Get RTC regist.


Bit twidling: 设置了哪个位?

我有一个 64 位无符号整数,正好 1 位集。我想为每个可能的 64 个值分配一个值 (在这种情况下,奇数质数,所以 0x1 对应于 3,0x2 对应于 5,.


上一页 下一页