小编Jey*_*ram的帖子

C中没有其他三元运算符

我想在C中没有使用三元运算符.我该怎么做.

(a)? b: nothing;
Run Code Online (Sandbox Code Playgroud)

这样的事情.我什么都没用?

c if-statement ternary operator-keyword

29
推荐指数
4
解决办法
4万
查看次数

降低linux内核定时器频率

当我以Gentoo作为客户运行我的虚拟机时,我发现tick_periodic功能有相当大的开销.(这是在每个定时器中断上运行的函数.)此函数更新导致开销的全局jiffy使用write_seqlocks.

这是HZ我的内核配置文件中的grep 和相关内容.

sharan013@sitmac4:~$ cat /boot/config | egrep 'HZ|TIME'

# CONFIG_RCU_FAST_NO_HZ is not set
CONFIG_NO_HZ=y
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
# CONFIG_MACHZ_WDT is not set
CONFIG_TIMERFD=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_X86_CYCLONE_TIMER=y
CONFIG_HPET_TIMER=y
Run Code Online (Sandbox Code Playgroud)

显然它已将配置设置为1000,但是当我这样做时sysconf(_SC_CLK_TCK),我得到100作为我的计时器频率.那么我系统的定时器频率是多少?

我想要做的是将频率降低到100,如果可能的话甚至更低.虽然它可能影响poll/ select和调度程序时间片的交互性和精度,但我准备牺牲这些东西以减少定时器中断,因为它会加速VM.

当我试图找出必须完成的工作时,我在某个地方读到你可以通过更改配置文件来实现这一点,否则在那里我读到将bootider = 10添加到boot参数就完成了工作,否则我在那里读到了如果您可以设置CONFIG_HIGH_RES_TIMERS即使不增加定时器频率的触发低延迟定时器也不需要,并且使用无定时系统也是如此CONFIG_NO_HZ.

我对于什么是正确的方法感到非常困惑.

我想要的是将定时器中断降低到尽可能低的程度.

我能知道这样做的正确方法吗?

linux timer linux-kernel

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

如何在ARM上使用kgdb?

ARMv7用作目标机器.我已经2.6.34.13为目标编译了Linux源代码.

Target使用minicom通过串口连接Host(Linux Development machine).

Target加载了新内核,并在命令提示符下启用了KGDB.

$ echo ttyAMA0 > /sys/module/kgdboc/parameters/kgdboc 
$ echo g > /proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)

显示输入KGDB ...消息并等待命令.

主机方面,

$arm-none-linux-gnueabi-gdb vmlinux

    gdb > set remotebaud 115200
    gdb > set debug remote 1
    gdb > target remote /dev/ttyS0
Run Code Online (Sandbox Code Playgroud)

在此之后,默认情况下会发生一些命令通信.

  1. qSupported从主机发送到目标.但目标不支持qSuppoted,因此返回$#00.同样?,HC-1发送命令但收到适当的响应.

  2. qOffsets命令没有收到目标的任何响应.

我怀疑是vmlinux.因为如果我放弃listgdb,它就不会显示10行代码

arch/arm/kernel/head.S : No such file or directory.
Run Code Online (Sandbox Code Playgroud)

注意::在服务器中完成的内核编译.因此在开发机器中没有可用的源.但看起来,arm-gdb正在寻找头部.

我不确定我在做什么错.我需要为整个内核加载符号.在这方面指导我.

c arm linux-kernel kgdb

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

为什么在这种情况下不会发生填充?

据我所知,默认情况下将完成4字节对齐.说

typedef struct
{
     int data7;  
     unsigned char data8;
     //3 -bytes will be added here.
}Sample1;
Run Code Online (Sandbox Code Playgroud)

所以sizeof(Sample1)将是8.

但是对于以下结构,为什么没有发生填充?

typedef struct
{
     unsigned char data1;
     unsigned char data2;
     unsigned char data3;
     unsigned char data4;
     unsigned char data5;
     unsigned char data6;

}Sample2;
Run Code Online (Sandbox Code Playgroud)

但sizeof(Sample2)仅为6.Sample2不是4字节对齐的结构?

编辑::

按照Wiki

数据对齐意味着将数据放入存储器偏移量等于字大小的某个倍数,这会因CPU处理内存的方式而提高系统性能.

但Sample2的成员不会以两个的倍数对齐?

谢谢.

c structure padding

13
推荐指数
3
解决办法
2955
查看次数

函数参数中的字符串

int main()
{
        char *x = "HelloWorld";
        char y[] = "HelloWorld";

        x[0] = 'Z';
        //y[0] = 'M';

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

在上面的程序中,HelloWorld将处于只读部分(即字符串表).x将指向该只读部分,因此尝试修改该值将是未定义的行为.

但是y将在堆栈中分配HelloWorld并将被复制到该内存中.所以修改y将正常工作.字符串文字:指针与字符数组

这是我的问题:

在下面的程序中,都char *arrchar arr[]使段错误,如果内容被修改.

void function(char arr[])
//void function(char *arr)
{
   arr[0] = 'X';
}        
int main()
{
   function("MyString");    
   return 0;
}
Run Code Online (Sandbox Code Playgroud)
  1. 它在功能参数上下文中有何不同?
  2. 没有为功能参数分配内存?

请分享您的知识.

c gcc string-literals function-parameter

12
推荐指数
2
解决办法
10万
查看次数

字符串文字:指针与字符数组

在这个声明中:

char *a = "string1"
Run Code Online (Sandbox Code Playgroud)

究竟什么是字符串文字?是string1吗?因为这个线程C和C++中字符串文字的类型是什么?说些不同的东西.

据我所知

int main()
{
    char *a = "string1"; //is a string- literals allocated memory in read-only section.
    char b[] = "string2"; //is a array char where memory will be allocated in stack.

    a[0] = 'X'; //Not allowed. It is an undefined Behaviour. For me, it Seg Faults. 
    b[0] = 'Y'; //Valid. 

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

请添加除上述要点之外的一些细节.谢谢.

调试输出显示错误 a[0] = 'Y';

Reading symbols from /home/jay/Desktop/MI/chararr/a.out...done.
(gdb) b main
Breakpoint 1 at 0x40056c: …
Run Code Online (Sandbox Code Playgroud)

c segmentation-fault string-literals

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

访谈:哈希函数:正弦函数

我被问到这个面试问题.我不确定它的正确答案是什么(以及答案背后的原因):

sin(x)是一个很好的哈希函数吗?

c trigonometry

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

将GDB通过串口连接到KGDB构建内核的问题


我想通过串口ttyS0从我的64位suse机器调试MIPS linux驱动程序.使用的gdb通过LAN调试应用程序而不是kgdb over serial.我使用此页面和其他一些内容来启动调试,但没有最终结果.

我的内核使用以下设置编译:

CONFIG_MAGIC_SYSRQ=y
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_KGDB=y
CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS is not set
CONFIG_CMDLINE="kgdboc=ttyS0,115200"
Run Code Online (Sandbox Code Playgroud)

如果我运行gdb:

gdb vmlinux
(gdb) set remotebaud 115200
(gdb) set debug remote 1
(gdb) target remote /dev/ttyS0
Run Code Online (Sandbox Code Playgroud)

我可以观察以下输出:

输出(GDB_TERMINAL):

(gdb) target remote /dev/ttyS0
Remote debugging using /dev/ttyS0
Sending packet: $qSupported:qRelocInsn+#9a...Ack
Timeout in mid-packet, retrying
Timed out.
Timed out.
Ignoring packet error, continuing...
Packet qSupported (supported-packets) is supported
warning: unrecognized item "qSupported:qRelocIns" in "qSupported" response
Sending packet: $Hg0#df...Nak
Sending packet: $Hg0#df...Ack
Packet received: Hg0
Sending …
Run Code Online (Sandbox Code Playgroud)

c linux kernel linux-kernel kgdb

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

无法将'std :: string'转换为'const char*

嗨,任何人都可以告诉这段代码有什么问题吗?

 string s=getString(); //return string

    if(!strcmp(s,"STRING")){
         //Do something
    }
Run Code Online (Sandbox Code Playgroud)

编译时我得到的错误就像

error: cannot convert ‘std::string’ to ‘const char*’ for argument ‘1’ to ‘int strcmp(const char*, const char*)’|
Run Code Online (Sandbox Code Playgroud)

c++

6
推荐指数
3
解决办法
3万
查看次数

将数组作为linux内核模块的命令行参数传递

我想将一组数据传递给Linux内核模块.

在内核中:

 int a[5]; 
 int count;
 module_param_array(a, int, &count, 0);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何从命令行传递值.如果它是一个只是变量,我将使用:

insmod k1.ko a=10 
Run Code Online (Sandbox Code Playgroud)

linux arrays command-line kernel linux-kernel

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