>  기사  >  백엔드 개발  >  从Go语言角度浅谈内存分配

从Go语言角度浅谈内存分配

Go语言进阶学习
Go语言进阶学习앞으로
2023-07-24 15:45:17481검색

C언어를 배워야 하는 이유

그럼,,,올해는 2023년입니다. 현재 다양한 개발 프로젝트를 보면 C언어가 실제로 많이 사용되는데요. 임베디드 등 특정 분야에서는 C를 거의 볼 수 없습니다. 그런데 왜 아직도 C 언어를 잘 배워야 한다는 xx 소리가 들리나요?

제가 이해한 바에 따르면 사실 C 언어를 배우는 것은 무엇입니까? 배우는 것은 언어가 아니라 언어 뒤에 있는 것, 그것이 표현하는 디자인, 그것이 표현하는 본질입니다.


C언어를 잘 배우면 어떤 이점이 있을까요

그룹에서 어떤 상사가 '나 일주일 만에 xx언어 배웠다'라고 말하는 것을 많은 뉴비들이 들어봤을 거라 믿습니다. 직접 일을 시작했는데 조용히 13살인 척, 어쩌면 너희들이 그룹에서 직접 싸우기 시작했을지도 모른다고 하더군요.

그렇다면 정말 1주, 2주 만에 언어를 배울 수 있다고 할 수 있나요?

책임을 질 수 있고 절대 문제가 없다고 말씀드릴 수 있지만, 튼튼한 기초 위에 세워져야 합니다.

그리고 포인터는 특히 중요한 기초입니다. 요즘 어떤 언어를 사용하든 본질은 포인터의 적용이지만 단순히 캡슐화되어 있습니다.

그러나 이것이 일으키는 원인은 기초가 불안정하면 특히 초보자에게 설명할 수 없고 이해할 수 없는 문제가 발생할 수 있다는 것입니다.

그래서 지금 어떤 단계에 있든 C언어를 배우지 못한 분들도 C언어를 배워서 남겨둔 중요한 기초를 다시 잡아야 합니다.

그럼 먼저 간략한 소개부터 할게요.


이번에 사용한 기술 스택은 이론상으로는 C언어를 사용하는데, 포인터를 시작하면 Go와 C가 기본이기 때문에. 동일하므로 더 사용자 친화적인 Go 언어가 사용됩니다.

나중에 Python을 추가해서 Go와 비교해보고, 인기있는 Python이 어떻게 메모리를 할당하는지 살펴보겠습니다.

현재 이 글을 읽을 때에도 친구들이 특정 기본 지식을 갖고 최소한 변수를 정의하는 방법 등을 이해하는 것이 좋습니다.


운영 체제 하드웨어의 관계

먼저 컴퓨터의 주요 구성 요소를 이해해야 합니다.

首先,简单的说,至少由 CPUCPU  内存条  硬盘  显卡 显示器  操作系统(Linux,Windowns)  

内存条

 从Go语言角度浅谈内存分配

硬盘

🎜🎜  🎜🎜🎜🎜显卡🎜🎜🎜🎜 🎜🎜🎜🎜显示器🎜🎜🎜 🎜  🎜🎜🎜🎜操work系统(Linux,Windows)🎜🎜🎜🎜等。🎜🎜🎜🎜那么这些硬件是如何互상형配합적呢。🎜🎜🎜🎜🎜 🎜🎜嗯...大概是这样子的,有点丑。🎜🎜ㅋㅋㅋ 하드디스크에 접근하려면 운영체제의 동의가 필요합니다.



운영 체제는 명령 실행을 완료하기 위해 CPU를 호출하고, CPU는 열려 있는 애플리케이션을 메모리 스틱으로 읽어 들입니다. 그러면 기계 하드 드라이브가 왜 이렇게 느려지나요? 솔리드 스테이트가 흔들리고 있습니다. 이로써 하드 디스크 데이터가 메모리 스틱 데이터로 전송이 완료됩니다.

CPU는 메모리 스틱으로 읽어온 애플리케이션 데이터를 분석합니다. CPU에서 처리한 데이터라면 자체적으로 가져와서 계산합니다. 그래픽 카드에서 처리한 데이터라면 호출됩니다. 계산을 위해 그래픽 카드에 연결합니다. 사운드 데이터인 경우 사운드 카드에서 계산됩니다.
  1. 위의 조정을 통해 기본적으로 전체 응용 프로그램이 실행될 수 있습니다. 하드 디스크에 데이터를 써야 하는 경우 CPU는 메모리 스틱에 있는 데이터를 하드 디스크에 쓰기만 하면 됩니다.
  2. 자, 위를 통해 기본적으로 운영체제와 각 하드웨어 간의 조정 관계를 이해할 수 있습니다.
  3. 비밀을 하나 말씀드리자면, 우리가 작성하는 코드는 기본적으로 메모리 스틱에서 실행됩니다. 마찬가지로 위에서 언급한 애플리케이션도 기본적으로 메모리 스틱에서 애플리케이션 코드를 실행합니다.

  4. 메모리스틱

    네, 바로 메모리스틱입니다.

    从Go语言角度浅谈内存分配

    이와 마찬가지로 메모리 스틱의 내부 구조도 이렇게 이해할 수 있습니다.

    이렇게 메모리스틱을 집으로 이해하면 됩니다.

    从Go语言角度浅谈内存分配

    은 여전히 ​​못생겼습니다...

    하지만 우리 메모리 스틱에는 주소라고도 하는 좌표 가 있습니다. 각각의 작은 격자에는 값이 있습니다.​​​ 하나씩.

    从Go语言角度浅谈内存分配

    그런데 보통 우리는 이렇게 단순하게 이해해요.

    주소(좌표)는 일반적으로 16진수로 표현되는데, 그 값이 무엇이든 바보같습니다.

    从Go语言角度浅谈内存分配

    Code Brief

    매우 짧은 Go 코드를 살펴보겠습니다.

    age 변수를 선언하고 18이라는 값을 할당하고 출력합니다.

    package main
    
    
    import "fmt"
    
    
    func main() {
        var age int = 18
        fmt.Println("我今年:",age,"岁")
    }

    이 기억에 어떻게 표현되는지.

    从Go语言角度浅谈内存分配

    변수 이름 age는 0x10010x1001地址,并且输出了0x0001주소 및 0x0001

    저장된 값입니다.

    바로 이렇습니다. 从Go语言角度浅谈内存分配

    참고:

    이 문장을 이해해야 합니다. 변수 이름은 메모리 스틱의 주소를 가리킵니다. 🎜🎜🎜

    上述age指向就是地址0x10010x1001

    但是我们在fmt.Println("我今年:",age,"岁")

    但是我们在fmt.Println("我今年:",age,"岁")打印时,我们打印的是地址里면적 ㅋㅋㅋ值

    例如:

    从Go语言角度浅谈内存分配上述代码内存分配图。

    从Go语言角度浅谈内存分配

    age2는 18세의 가치를 저장할 주소를 재신청합니다.

    때때로 토요일에 둘 다 같은 기억을 가리키는 경우가 있냐고 물을 수도 있습니다.

    从Go语言角度浅谈内存分配

    결과: 물론 이 상황에 대해서는 나중에 이야기하겠습니다. 이제 차근차근 이해해 보세요.


    결론

    변수 이름은 메모리 주소 를 가리킵니다.

    값을 할당할 때나 인쇄 등의 변수를 연산할 때 주소 에 있는 값을 연산합니다.


    End

    벌써 내용이 너무 길어서 좀 어지러우실 수도 있으니 이번 글은 여기서 마치겠습니다.

    작업 중 작업에 문제가 있을 경우, 아래에 메시지를 남겨주시면 최대한 빨리 문제를 해결해 드리겠습니다.

    저는 Zhouba의 코더입니다. 좋다고 생각하시면 좋아요를 눌러주세요.

    시청해주셔서 감사합니다.

    수술 중 문제가 있을 경우, 아래에 메시지를 남겨주시면 최대한 빨리 문제를 해결해 드리겠습니다.

    어제보다 오늘이 더 나아졌고 앞으로도 그럴 것이라고 다른 사람들에게 미소를 지으며 말해주세요.

    글이 좋았다면 좋아요를 눌러주시고 응원 메시지를 남겨주세요. 읽어주셔서 감사합니다. 궁금한 점이 있으면 아래에 메시지를 남겨주세요~

    Python에 대해 더 자세히 알고 싶다면 학습 웹사이트(http://pdcfighting.com/)를 참조하세요. 클릭하여 읽어보세요. 원문은 바로 가셔도 됩니다~

    ------------------ --- 종료 ------- ---- 이전 호의 흥미로운 기사 추천: ​​Go 언어 네트워크 프로그래밍의 기본을 이해합니다Go 언어의 기본 구조(겨울)에 관한 기사

  5. 이 기사를 통해 Go 언어의 동시성(채널)의 기본을 이해할 수 있습니다

  6. 从Go语言角度浅谈内存分配

    모두를 환영합니다좋아요, 메시지 남기기, 전달하기, 재게시하기, 여러분의 참여와 지원에 감사드립니다

    바둑 학습 그룹에 참여하고 싶다면 백그라운드에서 답장을 보내주세요. [그룹에 참여 ]

    수천 개의 산과 강은 항상 사랑합니다. [ Looking]을 클릭하세요.

위 내용은 从Go语言角度浅谈内存分配의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Go语言进阶学习에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
이전 기사:다음 기사: