C 網易雲課堂開發工程師 堆,棧與記憶體管理

2022-05-13 14:00:14 字數 1420 閱讀 4407

1.output函式

#include

ostream& operator<< (ostream& os, const string& str)

2.stack(棧),heap(堆)

stack,是存在於某作用域(scope)的一塊記憶體空間(memory space).例如當呼叫函式,函式本身即會形成乙個stack用來放置它所接收的引數,以及返回位址。

在函式本省內宣告任何變數,其所使用的記憶體均取自stack

heap,是指由作業系統提供的一塊global記憶體空間,程式可以動態分配(dynamic allocated)從某種獲得若干區域(blocks)。

3.stack objects的宣告期

class complex

c1便是所謂stack object,其生命在作用域(scope)結束之際結束生命,這種作用域內的object,又稱為auto object,因為他會被自動清理(自動呼叫析構函式)。

4.static local objects的宣告期

c2便是所謂static object,其生命在作用域(scope)結束之後仍然存在,直至整個程式結束。

5.global objects的生命期

complex c3(1, 2);

c3便是所謂global object,其生命在整個程式結束之後才結束。可以將其視為一種static object,其作用域是整個程式。

6.heap objects的生命期

class complex

p所指的便是heap object,其生命在它被delete之際結束。

class complex

以上出現記憶體洩漏(memory leak),因為當作用域結束,p所指的heap object仍然存在,但是指標p的生命卻結束了,作用域之外再也看不到p(也就沒有機會delete p).

7.new:先分配memory,在呼叫ctor

complex* pc = new complex(1,2);

編譯器轉化為

complex *pc;

1.void* mem = operator(sizeof(complex));      分配記憶體

2.pc =static_cast(mem);             轉型

3.pc->complex::complex(1, 2);                 建構函式

8.delete:先呼叫析構函式,在釋放記憶體

complex*ps = new string("hello");

delete ps;

編譯器轉化為

string::~string(ps);                          析構函式

operator delete(ps);                          釋放記憶體

網易 資深Android開發工程師

網易杭州研究院是網易集團設立的唯一的研究院機構,承擔網易集團先進技術研究的職責,為集團業務提供技術領先的技術支撐平台,同時負責以技術為核心的商業化業務的開拓。主要職責如下 1.負責網易易測的安卓底層技術研究與攻關 2.負責網易易測相關功能的設計 開發與優化。職位要求 1.三年以上安卓開發經驗 2.熟...

2019屆網易遊戲測試開發工程師面試(內推)

總體問的很基礎,但本人太菜,有一些沒答上來,現在記憶裡還有這麼幾個問題,分享給大家!一 自我介紹 沒啥說的,使勁扯吧!1 姓名 學校 專業 年紀 有的崗位還真的要看年齡 應聘崗位 2 本碩期間學的東西,比如說本科主要研究什麼,碩士期間主要研究什麼?有什麼專案經歷?有什麼成果?3 本碩,主要是本科期間...

160818網易內推測試開發工程師面試總結

我天津的去杭州面試 真的很作死。流程 兩輪技術面,一輪hr面 死在了二面 這兩輪都沒怎麼問技術的東西,可能跟測試開發這個崗位的性質有一定的關係。第一輪技術面 據說一面不怎麼篩人 首先遞簡歷 自我介紹 面試官拿到簡歷之後,就開始問專案 簡介專案內容 畫了一下設計的結構 介紹了一下自己在專案中做了些什麼...