“开年,我老婆携2万块进A股,今天我登录她账户,账上已有5万块,我蛮震惊的!   

问:“你怎样做到的?”  

她说:“我前些日子又转进去8万。”

咱们80后这代人大概是大一的时候学习C言语的,可能现在90后这一代也差不多,可是现在00后这一代人现已从小学,初中开端就学习C言语了。

笨叔在工作中发现,能熟练运用C言语的程序猿真的不多,大部分人都去玩Java,PHP,go,python等高级言语,像C这种时时刻刻需要和内存地址和指针做斗争的言语,显得太low。

下面是一个工作中的案例,这个案例和打了“真”的狂犬疫苗相同,程序乱跳,猴犀利!

小明同学想在Qemu中完成一个裸机体系,依葫芦画瓢界说了一个task_struct数据结构。按照Linux内核的完成,在体系第一个进程的task_struct数据结构,那么这进程的栈是在 task_struct数据结构的8KB巨细的顶部。如这个图所示。

[笨叔点滴7] 再也回不去的C语言

小明同学三下五除二在main.c文件中完成了init_task,如下面所示。

static struct task_struct init_task = INIT_TASK;\

#define INIT_TASK

{

.state = -1,

.counter = 0,

.priority = 1,

.preempt_count = 0,

.flags = PF_KTHREAD,

.pid = 0,

}

界说完init_task之后,小明同学 接下来按照上面这个图,想当然来 完成一个“神来之笔”的拜访,来获取当时进程的栈框(stack frame)。

struct pt_regs *

get_current_pt_regs(struct task_struct *tsk)

{

unsigned long p;

p = (unsigned long)tsk + THREAD_SIZE –

sizeof(struct pt_regs);

return (struct pt_regs *)p;

}

自从小明完成和调用这函数之后,他的程序再也没有正常过,不是出现“Data abort”异常,便是程序乱跑,和打了“真”的狂犬疫苗相同。笨叔和小明同学说,你学Linux内核的代码完成,只看到了皮毛,还需要继续深入学习C言语哟!

我们看看小明同学的代码出现是啥缺点吗? 你们有答案了,别忘了在谈论区留言哟!