当前位置:网站首页>How to confirm the storage mode of the current system by program?

How to confirm the storage mode of the current system by program?

2022-07-06 22:31:00 It's Beichen not too PI acridine

union keyword

union The usage of key words and struct It's very similar to .

union Maintain enough space to place... In multiple data members “ A kind of ”, Instead of configuring space for each data member , stay union All data members in share a space , Only one data member can be stored at a time , All data members have the same starting address .

union StateMachine
{
    
	char character;
	int number;
	char *str;
	double exp;
};

One union Only configure a large enough space to accommodate the maximum length of data members , Take the example above , The maximum length is double Form , therefore StateMachine The size of the space is double The size of the data type .

Large and small mode pairs union The impact of type data

union
{
    
	int i;
	char a[2];
}*p, u;

p = &u;
p->a[0] = 0x39;
p->a[1] = 0x38;

p.i What should be the value of ?
Its value is adopted by the system Storage mode and int type The number of bytes in the storage space is determined
When int by 4 Byte time
answer : When in big end mode 0x39380000
answer : When in small end mode 0x00003839

Here we need to consider the storage mode : Big end mode and small end mode .
Big end model (Big_endian): The high bytes of word data are stored in the low address , The low byte of word data is stored in the high address .
The small end model (Little_endian): The high byte of word data is stored in the high address , The low byte of word data is stored in the low address .

union The space occupied by type data is equal to the space occupied by its largest member . Yes union The members of type are accessed relative to the base address of the union. The offset is 0 Start at , That is to say, no matter which variable is accessed by the consortium, it is accessed from union The first address of .

How to confirm the storage mode of the current system with a program ?

Please write one. C function , If the processor is Big_endian Of , Then return to 0; if Little_endian Of , Then return to 1.

hypothesis int Type variable i Is initialized to 1.
Store in big end mode , The memory layout is shown below :
 Insert picture description here

Store in small end mode , The memory layout is shown below :

 Insert picture description here
Variable i Occupy 4 Bytes , But the value of only one byte is 1, The values of the other three bytes are 0. If the value on the low address is 0, without doubt , This is the big end mode ; If the value on the low address is 1, without doubt , This is the small end mode .

You can use union Characteristics of type data : All members have the same starting address .

int checkSystem( )
{
    
	union check
	{
    
		int i;
		char ch;
	} c;
	c.i = 1;
	return (c.ch ==1);
}

You can use this function to test the storage mode of your current system .

原网站

版权声明
本文为[It's Beichen not too PI acridine]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207061439468929.html