Skip to content

proposal: cmd/compile: type layout optimization: apply struct field reordering during compile time for efficient memory alignment #53048

Closed
@Dentrax

Description

@Dentrax

Context

The goal is to divorce the order of fields in source code from the order of struct fields, then optimize structs by always ordering fields from least to most aligned in memory layout. 1

Proposal

type Unoptimized struct {
  a int8
  b int16
  c int8
  ...
}

During compile time optimization phase, Go should try to optimize reordering for all structs and their fields.

type LetGoOptimize struct {
  a int8
  b int8
  c int16
  ...
}

golang.org/x/tools already have a linter called fieldalignment that detects structs that would use less memory if their fields were sorted.

Backward Compatibility

I don't have much technical detail about the compiler to cover this section. So waiting your thoughts!

  • New go:noreorder compiler directive

The //go:noreorder directive must be followed by a type struct declaration. It specifies that auto reordering should not be applied, overriding the compiler's usual optimization rules.

Similar Works

P.S: I couldn't find neither a similar proposal her nor discussions; so feel free to close and drop some references if this is duplicate or have discussed before.

Footnotes

  1. https://go101.org/article/memory-layout.html

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions