💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
# C 数据类型 基本的数据类型有int、double、long、char及各种指针类型。在C语言中,使用变量时,提前定义变量并指定变量类型,而在PHP中变量不需要指定类型。 C语言的数据类型在不同的操作系统中长度不同。 # 结构体(struct) 使用 struct 定义就是结构体。zval结构体总大小 16 字节。 ``` struct _zval_struct { zend_value value; /* value 8个字节 */ union { struct { ZEND_ENDIAN_LOHI_4( zend_uchar type, /* 代表不同类型 */ zend_uchar type_flags, /* 表示常量或不可变类型 变量标记 */ zend_uchar const_flags, /* 常量类型标记 */ zend_uchar reserved) /* 保留字段 */ } v; uint32_t type_info; } u1; /* u1 4个字节 */ union { uint32_t next; /* 解决hash冲突的 */ uint32_t cache_slot; /* 运行时缓存 */ uint32_t lineno; /* AST抽象语法树 标记php行 */ uint32_t num_args; /* 函数传入参数的个数 */ uint32_t fe_pos; /* foreach position */ uint32_t fe_iter_idx; /* foreach iterator index */ uint32_t access_flags; /* class constant access flags 类标记 public等 */ uint32_t property_guard; /* single property guard 防止类循环引用 */ } u2; /* u2 4个字节 */ }; ``` # 联合体(union) 联合体复用同一块内存,联合体大小为最大成员的大小。 ``` union test{ char a; //1 int b; // 4 long c; //8 } ``` 联合体是成员变量共享一块内存,可以根据使用确定含义;而结构体是不共享的,成员变量不共享一块内存。另外,结构体存在对齐问题。 # 堆和栈的基本知识 1. 栈区(stack)——存储参数值、局部变量,维护函数调用关系等。 2. 堆区(heap)——动态内存区域,随时申请和释放,程序自身要对内存泄漏负责。 3. 全局区(静态区)——存储全局和静态变量。 4. 字面量区——常量字符串存储区。 5. 程序代码区——存储二进制代码。 总体来讲,栈上的变量是局部的,随着局部空间的销毁而销毁,由系统负责。 堆上的变量可以提供全局访问,需要自行处理其生命周期。