0301 宏与大小端的概念【PHP7的基本变量】

在原码中的位置

/Users/Macbook/Documents/100 Work/100 Work PHP/php7internal/PHPtest/php-7.2.29/Zend/zend_types.h

struct _zval_struct {
	zend_value        value;			/* value */
	union {
		struct {
			ZEND_ENDIAN_LOHI_4(			//大小端
				zend_uchar    type,			/* active type */
				zend_uchar    type_flags,
				zend_uchar    const_flags,
				zend_uchar    reserved)	    /* call info for EX(This) */
		} v;
		uint32_t type_info;
	} u1;
	union {
		uint32_t     next;                 /* hash collision chain */
		uint32_t     cache_slot;           /* literal cache slot */
		uint32_t     lineno;               /* line number (for ast nodes) */
		uint32_t     num_args;             /* arguments number for EX(This) */
		uint32_t     fe_pos;               /* foreach position */
		uint32_t     fe_iter_idx;          /* foreach iterator index */
		uint32_t     access_flags;         /* class constant access flags */
		uint32_t     property_guard;       /* single property guard */
		uint32_t     extra;                /* not further specified */
	} u2;
};

宏的使用

宏就是替换
在这里,为什么要倒序输入的值呢?
宏定义

大小端

因为PHP要在不同的地址上运行,所以要区分当前是大端机器,还是小端机器。
大端:把高位放在了低地址。
小端:把低位放在低地址。
在这里插入图片描述

宏的代码测试

在这里插入图片描述

大小端的代码测试

fun2利用联合体的内存覆盖原理,判断大小端:
如果c=1,则说明低位在低内存地址。
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章