減小C語言生成的執行檔案大小的方法(嵌入式)
編譯過程新增
-ffunction-sections和-fdata-sections
連結過程新增選項
-Wl,--gc-sections
可以使得編譯出來的程序去除無用函式和全域性變數符號,減少程序大小。
1. 編譯過程中新增-ffunction-sections和-fdata-sections會在輸出檔案object中給每個函式和全域性變數控制在一個section中並以對應的函式名或全域性變數名命名,
2. 連結過程中-Wl,–gc-sections,因為連結時查詢符號是以section為單元進行引用的,對於沒有引用到的符號,對應的section也不會引進來,故排除掉了無用的函式和全域性變更,從而減少可執行檔案的大小。
這些選項對-g和gprof會有些影響
參考檔案
相關推薦
減小C語言生成的執行檔案大小的方法(嵌入式)
編譯過程新增 -ffunction-sections和-fdata-sections 連結過程新增選項 -Wl,--gc-sections 可以使得編譯出來的程序去除無用函式和全域性變數符號,減少程序大小。 1. 編譯過程中新增-ffunction-s
ubuntu生成C語言可執行檔案
最重要的是寫CMakeLIst.txt檔案。 寫好CMakeLIst之後,使用cmake-gui。在terminal輸入cmake-gui,開啟介面如下: 選擇unix makefiles 點選finish之後,再分別點選configure和genera
提高C語言程式執行穩定性的方法
9、備案所有的全域性變數,考慮全域性變數對程式可能產生的影響,儘量少用全域性變數。對於全域性變數的定義最好使用“static”來申明,不讓其它模組直接訪問該全域性變數,並且設計好相應的操作該全域性變數的方法函式,在定義全域性變數時要充分考慮好全域性變數的初始化方法和程式結束時的處理方法,對於整個工程中的全域性
C語言讀取CSV檔案的方法1
1、字串處理中的 strtok() 函式我們首先來介紹C語言標準庫中的一個非常有用的字串處理函式 strtok(),該函式位於標頭檔案string.h中,它的原型是:char *strtok( char
VS2008編譯C語言生成dll檔案
1、在C#中int關鍵字表示一種整型,是32位的,它對應的.NET Framework型別為System.Int32。 int 和 long是標準C#語言的關鍵字,在Microsoft.NET中相當於有一個別名:Int32 和 Int64。 2、編譯生成DLL檔案 1)開啟
C語言讀取CSV檔案的方法2
在之前的文章中,我們已經介紹了利用strok()函式對CSV檔案進行解析的基本方法。本文將在此基礎上更進一步,我們要將一個用CSV檔案儲存的表格資料放進一個二維陣列中。首先來看看作為示例的一個小型的CS
用C語言開發一個BT下載軟體 (四) ------ 程式碼實現-1-種子檔案解析模組
//parse_metafile.h #ifndef PARSE_METAFILE #define PARSE_METAFILE // 儲存從種子檔案中獲取的tracker的URL typedef struct _Announce_list { char ann
c語言:順序表的實現(二 ) 就地逆置,有序合併,大小調整。
#include<iostream> #include<stdio.h> #define LIST_INIT_SIZE 100 using namespace std; struct Node { int *elem; int Len
C語言實現粒子群算法(PSO)二
計算 default img 第一個元素 1.4 best 實驗 atl 說過 上一回說了基本粒子群算法的實現,並且給出了C語言代碼。這一篇主要講解影響粒子群算法的一個重要參數---w。我們已經說過粒子群算法的核心的兩個公式為: Vid(k+1)=w*Vid(k)+c1*r
嗨翻C語言--這裏沒有蠢問題(一)
環境變量 文本編輯 進制 括號 大寫 指針變量 位數 literal 意義 問:card_name[0]是什麽意思?答:它是用戶輸入的第一個字符。如果用戶輸入了10,那麽card_name[0]就將是1。問:總是得用/*和*/寫註釋嗎?答:如果你的編譯器支持C99標準,就可
C語言指針的使用例子(1)指針地址的輸出
clu 用例 int clas 指針 light 使用 指針的使用 div #include <stdio.h> int main(void) { int a=10; int *p = &a; *p = 89; printf("變量
【藍橋杯】第六屆國賽C語言B組 2.完美正方形(dfs)
spa else img IT bool break main LG fill 如果一些邊長互不相同的正方形,可以恰好拼出一個更大的正方形,則稱其為完美正方形。 歷史上,人們花了很久才找到了若幹完美正方形。比如:如下邊長的22個正方形2 3 4 6 7 8 12 13 14
關於c語言的scanf\n的問題(scanf_s)
今天遇到一道題要求輸入scanf("%c %c %c\n",&a,&b,&c),結果不停地出現問題,經過許久嘗試,終於發現是\n出現了問題,scanf遇到\n看到另有玄機。這種情況下會要去多輸入一行,才有用,但是實際讀入的卻還是第一次輸入
C語言程式的模組化——繼承(2)
在C語言程式的模組化——封裝中,介紹瞭如何使用C語言的結構體來實現一個類的封裝,並通過掩碼結構體的方式實 現了類成員的保護,使公有屬性和私有屬性共存。 現在再談談面向物件的另一個基本特性——繼承。 繼承表示類與類之間的層次關係,這種關係使得某類物件可以繼承另外一類物件的
C語言資料型別表示式相關知識(Linux)
#include<stdio.h> int main(int argc,char**argv) { printf(“Hello Word\n"); printf(“argv[%d],%s\n”,i,argv[i]); return 0; } 計算
C語言變數定義與資料溢位(初學者)
1、變數定義的一般形式為:型別說明符、變數名識別符號等;例:int a,b,c;(abc為整型變數) 在書寫變數定義時應注意以下幾點: (1)允許在一個型別說明符後,定義多個相同型別的變數。各變數之間用“,”間隔。型別說明符與變數名之間用一個空格間隔。 (2)最後一個變數之後必須以“;”結尾。 (3)
C語言的奇技淫巧(積累)
列印引數巨集 #define INPUT_CHECK(x) \ if ((x)) \ {
嵌入式C語言的位元組對齊理解(圖文)
1.位元組對齊? 對齊跟資料在記憶體中的位置有關。如果一個變數的記憶體地址正好位於系統長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設一個整型變數的地址為0x00000004,那它就是自然對齊的。 2. 計算機為什麼要對齊? 需
C語言再學習 -- ASCII碼錶(轉)
ASCII碼錶第一部分:ASCII非列印控制字元表ASCII表上的數字0–31分配給了控制字元,用於控制像印表機等一些外圍裝置。例如,12代表換頁/新頁功能。此命令指示印表機跳到下一頁的開頭。(參詳ASCII碼錶中0-31)第二部分:ASCII列印字元數字 32–126 分配給了能在鍵盤上找到的字元,當您檢視
在linux下,如何在C語言中使用正則表示式(整理)
一個正則表示式的教程可以參看(裡面有個測試正則表示式的工具) 正則表達是用來匹配字串的好東東。 如果使用者熟悉Linux下的sed、awk、grep或vi,那麼對正則表示式這一概念肯定不會陌生。由於它可以極大地簡化處理字串時的複雜度,因此現 在已