日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局)

發(fā)布時間:2023/12/10 pytorch 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

上一篇文章學了堆,棧以及靜態(tài)存儲區(qū)。它們實際上都是針對進程來說的。那么程序與進程有什么區(qū)別呢?

本文不細講程序與進程。

1 程序與進程

1.1 什么是程序

寫完的.c文件是源文件。也叫源代碼。

將源代碼編譯后,會生成可執(zhí)行文件程序(Linux下是.out,windows下是.exe)。這個文件就是程序。也叫作可執(zhí)行代碼。

比如下面的源代碼對應的可執(zhí)行文件的內(nèi)容:

那么程序文件中,各個段的作用是什么?

  • 堆和棧是在程序運行開始后才正式存在。是程序運行的基礎
  • .bss段存放的是未初始化的全局變量和靜態(tài)局部變量(初始化為0的也算未初始化這里)
  • .text段存放的是程序中的可執(zhí)行代碼
  • .data段存放的是已經(jīng)初始化了的全局變量和局部靜態(tài)變量.
  • .rodata段存放的是程序中的常量值。如字符串字面量。

上述圖中,程序中的函數(shù)的局部變量是在程序運行開始后才在棧空間分配內(nèi)存。那么在可執(zhí)行文件中,局部變量是怎么記錄的?

實際上在可執(zhí)行文件中有一個符號表,這個符號表記錄了所有符號(變量和函數(shù)名)的信息。當程序加載到內(nèi)存的時候,加載器根據(jù)符號表里記錄的關于局部變量的信息來為局部變量分配棧空間。

1.2 什么是進程

程序是可執(zhí)行文件。那么將可執(zhí)行文件加載到內(nèi)存中去運行就形成了進程。進程的內(nèi)存布局與可執(zhí)行程序文件的布局的關系大致如下(不夠細致,這里只是籠統(tǒng)的講解它們的區(qū)別):

可以看到進程中是沒有File Header字段的。

1.3 程序與進程的不同點

  • 程序是靜態(tài)的概念。表現(xiàn)形式為一個可執(zhí)行文件
  • 進程是動態(tài)的概念。由操作系統(tǒng)加載程序運行后變?yōu)檫M程
  • 每個程序可以對應多個進程
  • 每個進程只能對應一個進程

1.4 程序術語的對應關系

  • 靜態(tài)存儲區(qū)通常指進程(或者程序也一樣)中的:.data,.bss,段
  • 只讀存儲區(qū)通常指進程中的:.rodata段
  • 局部非靜態(tài)變量所占空間為棧空間 .是進程里的
  • 動態(tài)空間為堆中的空間 ,也是進程里的
  • 程序的可執(zhí)行代碼存在于.text段。是只讀的。

2 總結(jié)

  • 熟練的區(qū)分程序與進程的一些概念。概念很容易說錯。

總結(jié)

以上是生活随笔為你收集整理的【C语言进阶深度学习记录】三十六 程序与进程的区别(程序的内存布局)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。