-
Notifications
You must be signed in to change notification settings - Fork 4.3k
Go: Memory Model entry file #1435
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
d58516b
13ee6d7
804999d
051f2db
fd77574
05adc4b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,73 @@ | ||
| --- | ||
| Title: 'Go: Memory' | ||
| Description: 'The Go memory model specifies the rules for how memory is accessed and modified in concurrent programs. It allows for the concurrent execution of multiple threads and includes operations such as reading, writing, allocating, and freeing memory. ' | ||
|
||
| Subjects: | ||
| - 'Computer Science' | ||
| - 'Developer Tools' | ||
|
|
||
|
||
| Tags: | ||
| - 'Concurrency' | ||
| - 'Data Structures' | ||
| - 'Memory' | ||
| - 'Variables' | ||
|
|
||
| CatalogContent: | ||
| - 'learn-go' | ||
| - 'paths/back-end-engineer-career-path' | ||
| - 'paths/computer-science' | ||
| --- | ||
|
|
||
| # Go: Memory Model | ||
|
||
|
|
||
| The Go programming language has a specific memory model that describes how variables are stored in memory and how they can be accessed by different threads. This memory | ||
| model is important because it determines the behavior of programs that use concurrency, or the execution of multiple threads at the same time. | ||
|
|
||
| ## Memory Operations | ||
|
|
||
| In Go, there are several basic operations that can be performed on memory: | ||
|
|
||
| 1. **Reading**: This operation involves accessing a memory location and obtaining the value stored at that location. For example: | ||
|
||
|
|
||
| ```go | ||
| x := 10 | ||
| y := x | ||
| ``` | ||
|
|
||
| In this code, the value of `x` is being read and stored in the variable `y`. | ||
|
|
||
| 2. **Writing**: This operation involves storing a value in a specific memory location. For example: | ||
|
|
||
| ```go | ||
| x := 10 | ||
| y := 20 | ||
| x = y | ||
| ``` | ||
| In this code, the value of `y` is being written to the memory location associated with `x`. | ||
|
|
||
| 3. **Allocating**: This operation involves creating a new block of memory and returning a pointer to the start of the block. In Go, this can be done using the `new` | ||
| function: | ||
|
|
||
| ```go | ||
| x := new(int) | ||
| ``` | ||
|
|
||
| This code creates a new block of memory for an `int` value and stores a pointer to the start of the block in the variable `x`. | ||
|
|
||
| 4. **Freeing**: This operation involves releasing a block of memory that is no longer needed, so that it can be reused by the program. In Go, memory is automatically | ||
| managed using a garbage collector, so explicit freeing of memory is not usually necessary. | ||
|
|
||
| ## Memory Model | ||
|
|
||
| The Go memory model is a set of rules that dictate how memory operations can be performed in a concurrent program. These rules specify the order in which memory operations must be performed and how they can be observed by different threads. | ||
|
||
|
|
||
| ### Concurrent Access to Shared Memory | ||
|
|
||
| One important aspect of the Go memory model is that it allows multiple threads to access shared memory concurrently, as long as they follow the rules for memory operations. This feature allows Go programs to take advantage of multiple CPU cores and improve performance. | ||
|
|
||
| ### Ordering of Memory Operations | ||
|
|
||
| However, the Go memory model also requires that certain memory operations be performed in a specific order to ensure that the program behaves correctly. For example, a write operation must occur before a read operation that depends on the written value. | ||
|
|
||
| ### Importance of the Go Memory Model | ||
|
|
||
| Overall, the Go memory model is a crucial aspect of the language that enables efficient and correct concurrent programming. Understanding how it works is essential for writing correct and performant Go programs. | ||
Uh oh!
There was an error while loading. Please reload this page.