gpt4 book ai didi

c - 如何让 gcc 在生成 .data 部分时忽略填充?

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:48 25 4
gpt4 key购买 nike

以下代码:

#include <stdint.h>

uint8_t byte = 0x12;
uint16_t word = 0x1234;

int main(int argc, char *argv[])
{

return 0;
}

检查 .data 部分,它显示 byte 变量为 2 个字节,而不是 uint8_t promise 的 1:

Hex dump of section '.data':
0x00601020 00000000 00000000 00000000 00000000 ................
0x00601030 12003412 ..4.

如何保证byte是1个字节,甚至让内存错位?我尝试添加 #pragam pack(1) 但它仍然是一样的。

最佳答案

byte variable 2 bytes, not 1 as uint8_t promises

变量为 1,但编译器将其填充为 2 个字节。请注意,这不会影响总节大小(它仍将对齐到 2 个字节)。

How can we ensure that byte is 1 byte, even it makes the memory misaligned?

你为什么要这样做?在许多平台上,这将导致编译器为内存访问生成低效代码,因此由于代码大小增加,您将丢失从变量对齐中挤出的任何内容。如果您绝对必须使用未对齐的全局变量,请使用 __attribute__((aligned(1))) 标记它们。

关于c - 如何让 gcc 在生成 .data 部分时忽略填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40991914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com