小编Ami*_*mar的帖子

C中变量的声明和定义之间的混淆

我是C的新手,我在变量的声明和定义之间经历了一些混淆.我想知道的另一件事是如果以下情况属实:

"宣言多次出现,定义一次."

也:

int x; 
Run Code Online (Sandbox Code Playgroud)

这只是一个声明吗?既然分配了内存,x为什么这不是一个定义而不是声明?

c variables

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

sizeof运算符如何在c中工作

我想知道sizeof运算符在C中是如何工作的.在下面的代码中我期望得到输出1但是得到4.因为p指向第一个位置并且在第一个位置有字符并且它的大小应该是1.

main()
{

char a[9]="amit";
int *p=&a;
 printf("%d",sizeof((char *)(*p)));
 }
Run Code Online (Sandbox Code Playgroud)

c

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

我们如何分配指向数组的指针

我在接受采访时被问过,有一个指向10个整数数组的指针,如下所示.

 int (*p)[10];
Run Code Online (Sandbox Code Playgroud)

你如何动态分配?

这是我做过的事情

p=(int *)malloc(10*sizeof(int));
Run Code Online (Sandbox Code Playgroud)

但它看起来不对,因为我没有做正确的类型转换.

所以我想知道*p的类型是什么?

与int*p类似,p的类型为int.

c

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

我如何计算IP头长度

我想用以下语句计算IP头长度

"标头长度是一个四位字段,顾名思义,它表示32位字中IP标头的长度"

现在,我在使用四位字段计算Ip标头长度(最小值和最大值)时遇到了困难

ip networking

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

如何将Linux内核Bin转换为ELF格式

我们有一个没有ELF头的Linux内核二进制文件,我们的引导加载程序将根据来自ELF头的计算加载内核映像(早期的QNX内核映像有ELF头),但由于我们的Linux内核映像没有一个ELF头,我们的引导加载程序拒绝将此内核映像加载到内存中.

由于某些原因,我们没有更改引导加载程序代码的选项,因此我们唯一的选择是将ELF标头插入具有特定入口点的Linux BIN文件中.

实现它的方法是什么?

elf linux-kernel bootloader

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

intel x86 中的 REP stosl 相当于什么

我正在尝试运行从 GAS 风格获取的指令,但是当我将此指令移植到 intel 风格时,出现如下错误:

"error: parser: instruction expected"
Run Code Online (Sandbox Code Playgroud)

我尝试了各种组合,例如 REP movsl、REP loadsl,但都给出了相同的问题,任何人都可以告诉这个正确的命令相当于 x86 中的 REP stosl

x86 assembly intel-syntax

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

仿真指令集背后的基本思想是什么?

我是虚拟化的新手,并试图理解设置仿真背后的基本思想.

我正在关注e500核心指令集仿真.

http://www.linux-kvm.org/page/E500_virtual_CPU_specification

内核代码中的这个特殊的"kvmppc_core_emulate_mtspr()"正在模拟powerpc核心的mtspr指令.

想知道我们在这个函数中究竟做了什么来模拟mtspr以及为什么只按e500_emulate.c模拟两个指令(mtspr和mfspr)

assembly kvm powerpc virtual-machine linux-device-driver

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

内核中的Ioremapped地址

我有关于ioremap的基本查询,用于将设备IO映射到内核的虚拟内存中.

我想知道如果从ioremap返回的地址传递给virt_to_phys()这样的例程,它会返回设备IO地址吗?

谢谢

c arm linux-device-driver linux-kernel

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

是否可以修改或访问程序计数器?

在阅读程序计数器时,我开始知道程序计数器的特殊之处在于无法直接修改其值.

是否有任何间接方式来访问/修改程序计数器的内容?

embedded assembly program-counter

3
推荐指数
1
解决办法
6819
查看次数

_bss_start定义Linux内核源码

我正在浏览Linux内核源代码,并在其中一个汇编文件中找到了_bss_start C varianle,但无法找到它被实际定义和初始化的位置.

看起来_bss_start是bss段的起始地址,但是在内核源代码中使用值初始化的位置和方式,我正在查看linux源码2.6.25.

我查看了文件asm-generic/section.h,其定义如下

 extern char _bss_start[]
Run Code Online (Sandbox Code Playgroud)

但是如何定义_bss_start,DS寄存器是用来初始化它的

x86 linux-device-driver linux-kernel

3
推荐指数
1
解决办法
1745
查看次数