成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從Go語言角度淺談內存分配

存儲 存儲軟件
相信各位小伙伴一定看過這樣的言論,某某B乎大佬xxx,發了一堆文字,一定要學好底層,一定要學好C語言!!,然后下面各種抬杠。

[[374018]]

前言

相信各位小伙伴一定看過這樣的言論,某某B乎大佬xxx,發了一堆文字,一定要學好底層,一定要學好C語言!!,然后下面各種抬杠。

B乎大佬:C語言是最牛掰的,一定要從C語言開始學起。

杠精張三:學C有啥用,啥都干不成,直接學Java,然后上框架,直接開始開發。

杠精李四:@杠精張三,你會懂C嗎,瞎胡扯,xxx一堆理由,反正,C是一定要學的,基礎一定要打好。

...各路杠精大V正在趕來...

杠精王五:PHP萬歲,PHP NB,PHP天下第一。

嗯...,可能各位小伙伴或多或少,都看到過這些言論,作為吃瓜群眾,我們樂呵樂呵就好了,咱們回歸正題叭!!

是否需要學習C語言,我的回答是,不是必要的,但是需要懂為什么要學習C語言。

為什么要學習C語言

嗯,,,今年是2020年,要是從目前的各種開發項目中開說,C語言的確是用的很少,除了嵌入式等一些一定領域,基本很少能見到C的蹤影了,但是為什么還是一直能聽到xx說要學好C語言呢?

按照我的理解,其實學習C語言,學的并不是這個語言,而是這個語言背后所代表的一些東西,代表的一些設計,代表的一些本質。

C語言學的好,究竟會帶來什么優勢

相信不少萌新在群里可能聽到某個大佬說,我一星期學完了xx語言,然后直接上手干活,然后你默默的說了一句,裝13,也可能,你們就在群里直接杠起來了。

那么,真的可以說,一周,或者兩周時間,學會一門語言嗎?。

我可以負責任的,告訴你,絕對沒問題,但是需要建立在強大的基礎上。

而指針,是一個特別重要的基礎,現在不管哪個語言,其實本質都是指針的應用,只不過是封裝的簡單了而已。

但是這造成的就是根基如果不穩,就會造成一些莫名奇妙并且不懂的問題,尤其是對萌新來說。

所以,不管現在不管在任何階段,沒有學習C語言的一定要學學C,撿起曾經丟下的重要的基礎。

那么,就先聽我簡單的入門一下吧。

所需要的技術棧

本次使用的技術棧是Go語言,理論來說是用C語言的,但是因為在指針這一塊入門時,Go和C的本質基本一樣,所以就采用更加人性化的Go語言。

后期會在加上Python,和Go對比一下,區別在哪,看看燒了一把火的Python是如何分配內存的。

當前,在看此文章時,我還是建議小伙伴有一定基礎的,至少能看懂怎么定義變量啥的都行。

操作系統各硬件的關系

首先,我們需要了解一下計算機主要組成部分。

首先,簡單的說,至少由 CPU 內存條 硬盤 顯卡 顯示器 操作系統(Linux,Windowns)等。

那么這些硬件是如何互相配合的呢。

 

嗯...大概是這樣子的,有點丑。

簡而言之就是:

  1. 系統上的每個應用(qq,微信,等)想要讓電腦播放音樂了,顯示器顯示個東西了,像硬盤寫入個文件了,都需要經過操作系統的同意。
  2. 操作系統調用CPU完成指令的執行,CPU將打開的應用讀取到內存條中,所以,為什么原來在機械硬盤會那么卡,機械太慢了,現在的固態嗖嗖嗖的就完成了硬盤數據到內存條數據的轉移。
  3. CPU分析讀取到內存條中的應用數據,如果是CPU處理的數據,自己拿走計算,如果是顯卡處理的數據,調用給顯卡計算,如果是聲音數據,給聲卡計算,等。
  4. 通過以上協調,整個應用基本就能跑起來了,如果需要將數據寫入硬盤,CPU在將內存條中的寫入硬盤就行了。

好嘞,通過上述,我們基本可以了解到操作系統和各硬件的協調關系。

悄悄的說個秘密咯,我們寫的代碼,基本都是運行在內存條中的呢,同理,上述所說的應用,基本也是將應用的代碼跑在內存條中的。

內存條

沒錯,就是這玩意,內存條。

 

同理,我還還可以這樣理解內存條內部的結構。

我們可以將內存條理解成一個個房子,就像這樣。

 

依然還是很丑...

但是我們的內存條是有的坐標的,也叫地址,每個小格子里放著一個個的值。

 

但是通常情況下,我們都是平面圖理解的,就像這樣。

地址(坐標)一般以十六進制表示,值該是啥就是傻。

 

代碼簡述

我們來看一段非常短Go的代碼。

聲明一個age變量并且賦值為18,并且輸出。

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     var age int = 18 
  7.     fmt.Println("我今年:",age,"歲"

在內存中如何表示。

 

我們的變量名age指向了0x1001地址,并且輸出了0x0001存儲的值。

就像這樣。

 

注:一定要理解這句話,變量名指向的就是內存條上的地址。

上述age指向就是地址0x1001。

但是我們在fmt.Println("我今年:",age,"歲")打印時,我們打印的是地址里面的值。

同理,我們在賦值,交換變量時,還是是地址里面的值。

例如:


 

 

上述代碼內存分配圖。

 

age2會重新申請一個地址存儲age的值18。

可能有時候可能會有人問,星期八,有沒有這種情況,他倆同時指向一個內存,這種不是更省內存嘛。

 

結果:當然會,這種情況,我們后面會講到的,現在能看懂就行,一步一步來。

結論

變量名指向的是內存地址。

 

我們在賦值時,或者打印等操作變量時,操作的是地址上面的值。

本文轉載自微信公眾號「 Go語言進階學習」,可以通過以下二維碼關注。轉載本文請聯系 Go語言進階學習公眾號。

 

責任編輯:武曉燕 來源: Go語言進階學習
相關推薦

2016-09-30 15:59:41

2021-01-16 12:10:24

Go語言計算機位開發

2009-07-09 10:01:26

設置JVM內存分配

2022-07-15 13:01:13

Kotlin編程語言Java

2021-12-16 06:52:33

C語言內存分配

2022-01-13 10:30:21

C語言內存動態

2021-05-30 19:29:12

內存Go語言

2023-01-10 09:18:37

Go內存分配逃逸

2023-11-21 08:03:43

語言架構偏移量

2022-07-25 15:38:59

Go 語言Go 語言編譯器內存逃逸

2023-01-28 08:32:04

Go內存分配

2021-08-10 21:58:54

Go語言Flag庫

2010-07-29 10:16:17

Linux內核Linux內存

2022-11-30 08:19:15

內存分配Go逃逸分析

2015-08-13 16:04:18

2014-07-14 15:51:08

AndroidGO語言

2023-11-21 15:46:13

Go內存泄漏

2023-04-14 08:39:01

AQS方法JDK5

2021-12-22 06:56:07

STM32C語言內存

2011-06-28 15:37:34

Qt 內存
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一码二码三码在线 | 97偷拍视频 | 国产剧情一区 | 国产综合久久久久久鬼色 | 91欧美激情一区二区三区成人 | 国产精品一级 | 亚洲免费福利视频 | 久久综合久久综合久久综合 | 亚洲天堂一区 | 欧美爱爱视频 | 国产不卡一区在线观看 | 干出白浆视频 | 午夜av电影| 亚洲国产高清高潮精品美女 | 中文字幕成人在线 | 成人在线中文字幕 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 日韩欧美字幕 | 国产一卡二卡三卡 | 99re免费 | 成人国产精品免费观看视频 | 成人亚洲在线 | 欧美国产中文字幕 | 久久高清亚洲 | 精品国产18久久久久久二百 | 中文字幕在线观看日韩 | 99精品在线观看 | 久久人 | av毛片| 九色 在线| 久久久国产一区二区三区 | 欧美精品在线播放 | 亚洲97| 老子午夜影院 | 日韩国产在线 | 日韩视频在线免费观看 | 成人亚洲一区 | 夫妻午夜影院 | 欧美一级在线视频 | 欧美精品一区二区三区在线播放 | 91视频国产区 |