通过int写入int时损坏的内存段

时间:2014-07-01 21:25:16

标签: c

为了有一个独立的二进制目的,我想在RAM中挂载一个有效负载,用int来声明它的内容int

int *payloadptr = malloc(10*sizeof(int));
payloadptr[0] = 0x11223344;
payloadptr[1] = 0x55667788;

这个数据设置器脚本是自动生成的,我选择用int做int,以便在我的.c文件中占用比char更少的空间 然而,当我转储内存时,我可以看到字节完全混合 但char char方法并非如此 什么可能导致这个?

2 个答案:

答案 0 :(得分:5)

你说的字节'mix'是由你的CPU字节序引起的。我假设您有一个基于Intel的CPU,其架构是Little Endian。我建议你在这里阅读关于字节序的http://en.wikipedia.org/wiki/Endianness。一个小端架构将导致int从LSB存储到MSB,然后MSB将反转数据。通过使用字符,您不会创建此字节序问题,因此内存不会损坏。

答案 1 :(得分:4)

如果您打算将int存储在内存中,那么希望通过int将其int写下来。机器的小端特性会导致44出现在比33更低的内存地址,但机器会将这四个字节正确解释为您编写的原始int

如果您的目的是将单个字节存储在内存中,那么您可能希望使用char-by-char方法,因为这将按照您编写的顺序存储字节。