c语言、Linux的一些知识点补充

1、全局变量和局部变量

全局变量储存在程序的数据段中,数据段用于存储程序中定义的全局变量和静态变量,周期为程序的开始到程序的结束

局部变量通常存储在程序的栈段,栈区用于存储,函数调用,函数参数,局部变量,局部变量的生命周期为函数调用开始到函数的返回结束

2、内存分配

一:从全局存储区域分配(程序数据段区):这时内存在程序编译阶段就已经分配好,该内存在程序运行的整个周期都有效,如:全局变量、static静态变量。

二:从栈区分配:在执行函数的时候,函数中的局部变量的存储单元都可以从栈中分配,函数执行结束后这些存储单元都会被自动释放,实现从栈中分配存储单元运算操作内置于处理器的指令集中,效率很高 但是分配的内存容量有限。

三:从堆中分配:也称为动态内存分配,在程序运行期间,可以使用malloc和new申请任意数量的内存单元,由程序员决定在什么时候使用free和delete释放内存。

3、父子进程关系

fork创建子进程后,父子进程用相同的代码段,子进程会copy父进程的数据段,栈区,堆区

4、线程之间关系

线程之间共享数据段,堆区,不共享栈区,每个线程都有自己的寄存器集合,包括程序计数器、栈指针、状态寄存器等,这些也是线程私有的。

5、大变量数据传给小变量

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
	int a = 0x37F;
	char b = a;
	printf("%d\n", a);
	printf("%d\n", b);	
}

在这里插入图片描述
关于数据存储方式

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

typedef union{
	unsigned long  u_val;
	signed long  i_val;
	uint16_t val[4];
}reg_sdate_t;


int main(){
	  reg_sdate_t u64_temp;
	  u64_temp.val[3] = 0;
	  u64_temp.val[2] = 0x1;
	  u64_temp.val[1] = 0x2345;
	  u64_temp.val[0] = 0x6789;
	  printf("%lx\n", u64_temp.u_val);
	 // printf("%ld", sizeof(long long));

     printf("short int %ld\n", sizeof(short int));
}
 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值