小编Har*_*ngh的帖子

为什么 gcc 不能将结构体的对齐方式减少到小于其单个字段之一的对齐方式

我有一个employee实例化的结构定义monica。结构看起来像这样

struct __attribute__((aligned(2))) employee {
    int salary; // 4 bytes
    int age; // 4 bytes
} monica;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我强制将结构对齐,2但 gcc 不会将结构对齐设置为 2,也不会引发错误。我尝试使用alignof宏(include <stdalign.h>)打印结构的对齐方式,该宏4作为结构的对齐方式返回。为什么 gcc 不能将结构的对齐方式设置为小于其字段之一的最大对齐方式的值。

我尝试通过另外添加一个指针作为结构中的字段来重现该问题。在将指针添加为字段时,我注意到 gcc 不允许我使用__attribute__((aligned(x))).

1GCC 允许我通过使用设置结构的对齐方式__attribute__((packed)),但它仍然不允许我1通过使用设置对齐方式__attribute__((aligned(1)))。为什么会发生这种情况?

海湾合作委员会 x86 v7.1.1

c memory struct memory-alignment

1
推荐指数
1
解决办法
572
查看次数

如何在Go中的单个语句中声明不同数据类型的变量

我想在 Go 的一条语句中声明两个不同数据类型的变量(string和)。error我不想使用短声明(:=)运算符,因为我喜欢在声明时指定变量的类型。

我正在关注Go 文档中的 Go 教程。我有一个函数greetings.Hello(),我正在从另一个模块调用它。该greetings.Hello()函数如下所示:

package greetings

import (
    "errors"
    "fmt"
)

func Hello(name string) (string, error) {
    // If no name was given, return an error with a message
    if name == "" {
        return "", errors.New("empty name")
    }

    // If a name was received, return a value
    var message string = fmt.Sprintf("Welcome %v!", name)
    return message, nil
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,该函数返回两个值(astring和 an error)。所以最终,我必须将该函数的结果分配给调用者中的两个变量。我正在 …

go

-2
推荐指数
1
解决办法
1468
查看次数

标签 统计

c ×1

go ×1

memory ×1

memory-alignment ×1

struct ×1