从 CPU 角度理解 Go 中的结构体内存对齐
大家好,我是 Go 学堂的渔夫子。今天跟大家聊聊结构体字段内存对齐相关的知识点。
原文链接: https://mp.weixin.qq.com/s/H3399AYE1MjaDRSllhaPrw
大家在写 Go 时有没有注意过,一个 struct 所占的空间不见得等于各个字段加起来的空间之和,甚至有时候把字段的顺序调整一下,struct 的所占空间又有不同的结果。
本文就从 cpu 读取内存的角度来谈谈内存对齐的原理。
01 结构体字段对齐示例
我们先从一个示例开始。T1 结构体,共有 3 个字段,类型分别为 int8,int64,int32。所以变量 t1 所属的类型占用的空间应该是 1+8+4=13 字节。但运行程序后,实际上是 24 字节。和我们计算的 13 字节不一样啊。如果我们把该结构体的字段调整成 T2 那样,结果是 16 字节。但和 13 字节还是不一样。这是为什么呢?
”`
type T1 struct {
f1 int8 // 1 byte
f2 int64 // ... ⌘ [Read more](https://gocn.vip/topics/20967)```
Eagle-eyed folks may have noticed that I made a few wee changes to this website.
The biggest, and most noticeable one is that I’ve filtered out all of the like type posts from appearing on the main feed, from rss, and in the archives. There were waaaaay to many, so filtering them out makes the entire website a lot more navigable. They are not gone, though, and I’ll probably keep sharing like type posts, but now they ar … ⌘ Read more
I just went to type the phrase “I avoid Linux like the plague” but then remembered that we’ve all learned that most people won’t actually go much out of their way to avoid the plague.
平凯星辰获评《金融电子化》2021 金融业新技术应用创新突出贡献奖
近日,《金融电子化》杂志社发布了 “2021 第十二届金融科技应用创新奖” 评选结果,平凯星辰(北京)科技有限公司(以下简称 “平凯星辰”)榜上有名,这是对平凯星辰在金融科技领域的创新成果与能力的充分肯定。

Day 16 of Advent of Code is so confusing that I will not finish today’s puzzle. I wonder if yesterday was my last day with Advent of Code, or will the puzzles become more understandable and easier again in the next few days? Maybe I’m just more the practical type. I like programming, but such complex algorithms are not really my thing. And in the end, Advent of Code is supposed to be fun… ⌘ Read more
go 1.18 泛型初体验
go 1.18 泛型初体验go.1.18beta 版发布,众所周知这个 go.1.18 版本会默认启用 go 泛型。这个版本也号称 go 最大的版本改动。
初识 golang 的泛型我们写一个 demo 来看看 go 的泛型是长啥样
”`
package main
import (
<span class="s">"fmt"</span>
)
type OrderTypesRead more”`
PEP 677: Callable Type Syntax
This PEP introduces a concise and friendly syntax for callable types,
supporting the same functionality as typing.Callable but with an
arrow syntax inspired by the syntax for typed function
signatures. This allows types like Callable[[int, str], bool] to
be written (int, str) -> bool. ⌘ Read more
On the blog: Amateur Stenography https://john.colagioia.net/blog/2021/11/28/steno.html #education #technology #opensource #typing
** Operators in C **
Following up my notes on Data Types and Variables in C here are notes on operators in C.
An operator is a symbol that represents a mathematical or logical operation. An operator effects operands.
C provides a number of operators.
Some arithmetic operators include,
”`hljs plaintext
+*
/
%
”`
% is the most exciting of the list, it is called modulo and it returns the remainder after division. Of note, modulo c … ⌘ Read more
PEP 673: Self Type
This PEP introduces a simple and intuitive way to annotate methods that return
an instance of their class. This behaves the same as the TypeVar-based
approach specified in PEP 484
but is more concise and easier to follow. ⌘ Read more
line in question: https://git.mills.io/yarnsocial/yarn/src/branch/master/types/lextwt/ast.go#L793
@movq@www.uninformativ.de
I’m not a Python programmer, so please bear with me.
The doc about encodings does also mention:
If you require a different encoding, you can manually set the Response.encoding property
Wouldn’t that be a one liner like (Ruby example)?
'some text'.force_encoding('utf-8')
I understand that you do not want to interfere with requests. On the other hand we know that received data must be utf-8 (by twtxt spec) and it does burden “publishers” to somehow add charset property to content-type header. But again I’m not sure what “the right thing to do” ™ is.
@prologic@twtxt.net @movq@www.uninformativ.de
Exactly, you see correct UTF-8 encoded version (even with content-type: text/plain leaving out charset declaration).
After following utf8test twtxt myself I now see that jenny does not handle it as UTF-8 when charset is missing from HTTP header, just like @quark@ferengi.one has observed.
So should jenny treat twtxt files always as UTF-8 encoded? I’m not sure about this.
My nutritional supplements aim should be:
- 1 or 1.5 cups of lentils (or any beans you might like better).
- 2 or 2.5 cups of bitter greens.
- 1 cup of your favourite protein (or an egg), grilled, or fried with a little of olive oil.
- 1 or 2 tomatoes, or a handful if of the cherry type.
- No added sugars. If it is sweet, make it have fibre.
- No added salt (or very little and ionised), as salt is everywhere.
Related, I tried wild rice for the first time yesterday. It was different, in a good way.
@stackeffect@twtxt.stackeffect.de
now Apache also announces content-type: text/plain; charset=utf-8
Well, that fixed things. 🥳
@quark@ferengi.one No client, those were created using date -Is and emacs. Off course all is UTF-8 encoded, but now Apache also announces content-type: text/plain; charset=utf-8
** Data Types and Variables in C **
I’ve been writing a heap of Lua lately — this has lead to my becoming interested, again, in C. Here are some ancient notes I dug up on the most basics of data types and variables in C.
All of a computer’s memory is comprised of bits. A sequence of 8 bits forms a byte. A group of bytes (typically 4 or 8) form a word. Each word is associated with a memory address. The address increases by 1 with each byte of memory.
In C, a byte is an object that is as big as t … ⌘ Read more
Does APL Need a Type System?
Does APL Need a Type System? by Aaron Hsu
APL is known for its concise problem-solving expressiveness, and it is used very successfully in places where high-quality and rapid iteration are requirements, not luxuries. Static Type Systems have ha… ⌘ Read more
Mozilla Firefox now shows advertisements as you type in URLs
Reason #7,852 why I recommend people stay far away from Mozilla. ⌘ Read more
Looking for a Docker Alternative? Consider This.
Docker recently announced updates and extensions to our product subscriptions. Docker CEO Scott Johnston also posted a blog about the changes. Much of the discussion centered on what the licensing changes mean for users of Docker Desktop, which remains free for small businesses and several other user types, but now requires a paid subscription — starting […]
The post [Looking for a Docker Alternative? Consider This.](https://www.doc … ⌘ Read more
Gajim: Development News September 2021
September brought many updates under the hood. With big changes coming up in Gajim 1.4, many parts of the code have to be touched. These changes remain mostly invisible for users, but make Gajim more robust. In some cases, this results in visible improvements as well: Both Add Contact and Start Chat windows are now detecting the type of chat behind an address.
Since development on Gajim 1.4 started, a lot has changed under the hood. … ⌘ Read more
https://www.elastic.co/elasticon/global/agenda?solutionProduct=null&type=null&technicalLevel=null&day=day-0&sol=null&typ=null&lev=null 看來 ElasticON 有些議程是排在 CEST 時區白天的。這樣至少在 JST 傍晚可以看直播
There is a type of flourishing available to a cat that is only rarely available to us. A human is never simply what she is, but is always striving to become something she is, as yet, not. This is the result of a self-image – a conception of herself and what her life should be – which, when unrealised, can occasion frustration and despair. What the Cat Knows (2020) | Hacker News
I typed in “trenta” (Starbucks for “XL”) into my iPhone and it didn’t recognize it as a real word. Does Apple not understand its primary audience?
In reply to: GitHub - hoppecl/jamlang0001
A small dynamically typed programming language with first-class comments, where every value is explained by a comment. ⌘ Read more
Reflection in golang
Reflection in Go is a form of metaprogramming. Reflection allows us to examine types at runtime. It also provides the ability to examine, modify, and create variables, functions, and structs at runtime. The Go reflect package gives you features to inspect and manipulate an object at runtime. Reflection is an extremely powerful tool for developers and extends the horizon of any programming language. Types, Kinds and Values are three important pieces of reflec … ⌘ Read more
The Hardest Problem in Type Theory - Computerphile ⌘ Read more
Words I cannot type rightly at the first attempt: testimonial, accessibility, successful
“showing that you care” type signalling depends on the sunk cost fallacy; or, there was selection pressure against the sunk cost fallacy (modulo reputation effects)
Kaidan: Kaidan 0.8 released: Typing notifications & message synchronization ⌘ Read more…
http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/ports/meta/gnome/pkg/README-main?content-type=text/x-cvsweb-markup gnome openbsd
Types of Scientific Paper ⌘ Read more…
Netaddr - a new IP type for Go ⌘ Read more…
The advice about interviewing being exhausting is spot-on. Recruiting, interviewing, and hiring candidates is a very different type of work than most of us engineering types enjoy. Until you’ve developed a thick skin, it can also be emotionally draining to reject candidate after candidate. I’m an interviewer at my company and burnt out | Hacker News
@thewismit@twtxt.psynergy.io @jlj@twt.nfld.uk in old school terminal jargon the ^H means control H or the sequence used in some terminals to indicate backspace. The “joke” is that the term failed to interpret it correctly and you can see the partially typed word before they changed it.
@prologic@twtxt.net its the puny code for the yarn emoji. Though you would want the type-able version to redirect so its not hard to type on non mobile.
java makes my head hurt. to be fair, every strongly typed lang makes it hurt.
@iolfree@tilde.club “I just typed in ‘censorship’ on pinterest and that is also completely banned.”
I just typed in ‘censorship’ on pinterest and that is also completely banned.
Large type legacy celebrated in 80 lines of go ⌘ Read more…
with !zet and !zetdo, I find myself constantly needing to type out UUIDs. thing is, they aren’t the easiest thing to type. might invent an intermediate typer-friendly intermediate UUID format that can then convert to the regular UUID format. #halfbaked
Are you able to coax your webserver to add the charset to the content type header? Browsers are having a hard time thinking you are sending latin-1
content-type: text/plain; charset=utf-8
@prologic@twtxt.net as promised! https://github.com/JonLundy/twtxt/blob/xuu/integrate-lextwt/types/lextwt/lextwt_test.go#
the lexer is nearing completion.. the tough part left is rooting out all the formatting code.
I may or may not have become involved in yet another blogging type thing, only this time it’s for writing fiction. Links will soon follow everywhere.
There are two types of computer programmers: Those who think that computers are the problem, and those who think that programmers are the problem.
@prologic@twtxt.netd so.. convert the 4 attributes in the struct to private, add getters plus some the other methods that make sense.
type Twt interface {
Twter() Twter
Text() string
MarkdownText() string
Created() time.Time
...
}
@prologic@twtxt.net I have some ideas to improve on twtxt. figure I can contribute some. 😁 bit more work and it will almost be a drop in replacement for ParseFile
Kinda wish types.Twt was an interface. it’s sooo close.