【Linux】內存管理

要求:

1、編寫程序,實現如下功能。

(1)隨機生成 1000000 個 0~1 之間的數;

(2)統計分析這些數據,計算均值、方差和分布情況,分布情況按

0.01 的步長進行統計;

(3)使用內存映射,將這些數及計算的均值、方差及分布情況寫入

文件,同時將結果在終端顯示;

隨機數的存放要求使用動態內存分配的方式,注意內存的釋放。

代碼實現:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>#define NUM_SAMPLES 1000000
#define STEP_SIZE 0.01
#define NUM_BINS (int)(1.0 / STEP_SIZE)double calculate_mean(double *data, int size) {//計算數組的平均值double sum = 0.0;for (int i = 0; i < size; i++) {sum += data[i];}return sum / size;
}double calculate_variance(double *data, int size, double mean) {//計算數組的方差double sum = 0.0;for (int i = 0; i < size; i++) {sum += (data[i] - mean) * (data[i] - mean);}return sum / size;
}void calculate_distribution(double *data, int size, int *distribution) {//根據步長統計數組的分布情況for (int i = 0; i < size; i++) {int bin = (int)(data[i] / STEP_SIZE);if (bin < NUM_BINS) {distribution[bin]++;}}
}int main() {srand(time(NULL));double *data = (double *)malloc(NUM_SAMPLES * sizeof(double));if (data == NULL) {perror("Failed to allocate memory for data");exit(EXIT_FAILURE);}for (int i = 0; i < NUM_SAMPLES; i++) {data[i] = ((double)rand() / RAND_MAX);}double mean = calculate_mean(data, NUM_SAMPLES);double variance = calculate_variance(data, NUM_SAMPLES, mean);int *distribution = (int *)calloc(NUM_BINS, sizeof(int));if (distribution == NULL) {perror("Failed to allocate memory for distribution");free(data);exit(EXIT_FAILURE);}calculate_distribution(data, NUM_SAMPLES, distribution);printf("Mean: %lf\n", mean);printf("Variance: %lf\n", variance);printf("Distribution:\n");for (int i = 0; i < NUM_BINS; i++) {printf("[%lf, %lf): %d\n", i * STEP_SIZE, (i + 1) * STEP_SIZE, distribution[i]);}int fd = open("output.dat", O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);if (fd == -1) {perror("Failed to open file for memory mapping");free(data);free(distribution);exit(EXIT_FAILURE);}off_t file_size = (NUM_SAMPLES * sizeof(double)) + (NUM_BINS * sizeof(int)) + (2 * sizeof(double)); // Data + Distribution + Mean + Varianceif (ftruncate(fd, file_size) == -1) {perror("Failed to resize file");close(fd);free(data);free(distribution);exit(EXIT_FAILURE);}void *map = mmap(NULL, file_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);if (map == MAP_FAILED) {perror("Failed to memory map file");close(fd);free(data);free(distribution);exit(EXIT_FAILURE);}double *mapped_data = (double *)map;int *mapped_distribution = (int *)((char *)map + (NUM_SAMPLES * sizeof(double)));double *mapped_mean = (double *)((char *)map + (NUM_SAMPLES * sizeof(double)) + (NUM_BINS * sizeof(int)));double *mapped_variance = mapped_mean + 1;memcpy(mapped_data, data, NUM_SAMPLES * sizeof(double));memcpy(mapped_distribution, distribution, NUM_BINS * sizeof(int));*mapped_mean = mean;*mapped_variance = variance;close(fd);munmap(map, file_size);free(data);free(distribution);return 0;
}

運行結果:

創建并保存程序文件

使用gcc編譯程序生成可執行文件:在使用gcc編譯的過程中我遇到了無法編譯的情況,gcc 沒有使用 C99 標準來編譯代碼,而是使用了更舊的 C 標準,在其中添加-std解決了問題。

運行該程序得出結果:多次運行后產生的隨機數服從均勻分布。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/88335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/88335.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/88335.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

蒼穹外賣—day1

文章目錄前言一、接口文檔導入與生成二、前端環境搭建三、后端環境搭建1. 了解項目結構2. 環境搭建常見問題總結前言 &#xff08;簡要說明筆記的目的&#xff1a;記錄搭建過程、關鍵配置和結構理解&#xff09; 一、接口文檔導入與生成 Apifox 導入 使用工具&#xff1a;https…

基于微信小程序的在線疫苗預約小程序源碼+論文

基于微信小程序的在線疫苗預約系統源碼論文代碼可以查看文章末尾??聯系方式獲取&#xff0c;記得注明來意哦~&#x1f339; 分享萬套開題報告任務書答辯PPT模板 作者完整代碼目錄供你選擇&#xff1a; 《SpringBoot網站項目》800套 《SSM網站項目》1200套 《小程序項目》600套…

Windows 11 安裝過程中跳過微軟賬戶創建本地賬戶

背景 在 Windows 11 的安裝和設置過程中&#xff0c;Microsoft 賬號登錄是默認的認證方式。然而&#xff0c;在某些情況下&#xff0c;可能需要繞過此步驟以創建本地賬戶。 微軟在 2025 年 3 月推送的 Windows 11 預覽版&#xff08;Build 26120.3653 和 Build 26200.5516&am…

利用DBeaver實現異構數據庫數據定時任務同步

1、背景 本需求需要實現抽取KingBaseEs數據庫的某幾張表數據&#xff0c;定時同步到MySQL中 2、工具準備 2.1 DBeaverEE25.1(必須要企業版&#xff0c;如果用社區版沒有定時任務功能) https://dbeaver.io/download/ 2.2 KingBaseEs數據庫及驅動 https://www.kingbase.com…

【TCP/IP】1. 概述

1. 概述1. 概述1.1 因特網及技術催生新時代1.1.1 信息化時代1.1.2 關鍵技術1.1.3 國家戰略1.2 網絡互聯的動機和技術1.2.1 網絡互聯的動機1.2.2 網絡互聯技術1.3 因特網的形成和發展1.3.1 國際因特網發展軌跡1.3.2 中國互聯網發展1.4 有關因特網的組織機構1.5 請求注解&#xf…

中老年人的陪伴,貓咪與機器人玩具有什么區別?

在人口結構深度老齡化的背景下&#xff0c;中老年群體的精神需求與情感陪伴已成為重要的社會議題。貓咪作為活生生的伴侶動物&#xff0c;與日新月異的智能陪伴機器人&#xff0c;代表了兩種截然不同的情感慰藉路徑——前者承載著生命互動的溫度與責任&#xff0c;后者則彰顯了…

day11-微服務面試篇

微服務在面試時被問到的內容相對較少&#xff0c;常見的面試題如下&#xff1a;SpringCloud有哪些常用組件&#xff1f;分別是什么作用&#xff1f;服務注冊發現的基本流程是怎樣的&#xff1f;Eureka和Nacos有哪些區別&#xff1f;Nacos的分級存儲模型是什么意思&#xff1f;R…

昇騰 k8s vnpu配置

參考文檔: https://www.hiascend.com/document/detail/zh/mindx-dl/500/AVI/cpaug/cpaug_018.html 此文檔實現為NPU910B3卡 主機設置靜態虛擬npu 設置虛擬化模式 &#xff01;本命令只支持再物理機執行&#xff0c;取值為0或1&#xff0c;&#xff08;如果是在虛擬機內劃分vNPU…

Redis常用數據結構以及多并發場景下的使用分析:Set類型

文章目錄前言redis中的set結構疑問1 &#xff1a;為什么使用數組后 整體時間復雜度還是O(1)疑問2&#xff1a; set特性是無序的那為什么當元素少的時候 用連續數組 去存儲呢&#xff1f;疑問3&#xff1a;當元素少于512的時候即使用intset存儲的時候 是如何維護唯一性的&#x…

Linux中rw-rw-r--相關的訪問權限講解

下面就是關于 rw-rw-r-- 的知識圖譜式講解。核心節點&#xff1a;rw-rw-r-- (文件權限表示法) 這是一個在 Linux/Unix 操作系統中&#xff0c;通過 ls -l 命令查看到的&#xff0c;用于描述文件或目錄訪問權限的10字符字符串。分支一&#xff1a;字符串的解剖 (Anatomy of the …

C#異常處理:更優雅的方式

C#異常處理&#xff1a;更優雅的方式 在 C# 編程的世界里&#xff0c;異常處理是繞不開的重要環節。程序運行時難免會出現各種意外&#xff0c;若處理不當&#xff0c;可能導致程序崩潰&#xff0c;給用戶帶來糟糕體驗。所以&#xff0c;掌握更優雅的異常處理方式&#xff0c;對…

Qt6中模態與非模態對話框區別

一.阻塞 vs 非阻塞1.模態對話框阻塞父窗口&#xff1a;打開后&#xff0c;用戶必須先處理該對話框&#xff08;關閉或完成操作&#xff09;&#xff0c;才能繼續操作父窗口。應用場景&#xff1a;強制用戶立即響應的場景&#xff0c;如確認對話框、登錄窗口、文件選擇器等。2.非…

處理Web請求路徑參數

目錄 1. 路徑變量&#xff08;Path Variable&#xff09; 2. 查詢參數&#xff08;Query Parameter&#xff09; 3. 表單參數&#xff08;Form Data&#xff09; 4. 請求體JSON參數&#xff08;Request Body JSON&#xff09; 5. 請求頭參數&#xff08;Header Parameters&…

創客匠人:技術賦能下的創始人 IP 打造與內容創作新邏輯

在知識變現的浪潮中&#xff0c;創始人 IP 的核心競爭力始終圍繞內容展開&#xff0c;但內容創作的效率與質量往往成為瓶頸。創客匠人基于對行業的深刻洞察&#xff0c;探索出技術與內容融合的路徑&#xff0c;為創始人 IP 打造提供了新的思路 —— 不再將內容創作視為單純的輸…

Mysql分片:一致性哈希算法

一、一致性哈希的核心原理哈希取模最大的痛點是&#xff1a;當分片數量&#xff08;例如數據庫節點數&#xff09;發生變化時&#xff0c;幾乎所有數據的哈希結果都會改變&#xff0c;導致大規模的數據遷移。一致性哈希就是為了解決這個“伸縮性差”的問題而誕生的。核心思想&a…

前端學習 vben 之 axios interceptors

前端學習 vben 之 axios interceptors interceptor 攔截器&#xff0c;是一種軟件設計模式&#xff0c;核心思想就是在程序執行的特定階段&#xff08;如請求發送前&#xff0c;響應返回后&#xff0c;方法調用前后等&#xff09;自動插入自定義邏輯。實現對核心流程的“攔截”…

【java面試day4】redis緩存-數據持久化

文章目錄問題&#x1f4ac; Question 1相關知識問題 &#x1f4ac; Question 1 Q&#xff1a;redis作為緩存&#xff0c;數據的持久化是怎么做的? A&#xff1a;有兩種機制&#xff0c;一種是RDB&#xff0c;RDB會在指定的時間間隔內將內存中的數據生成快照&#xff0c;保存…

Vue3中element plus默認獲取最近一周和上個月的時間區間并在后端分開傳值

<el-form-item label"結算時間&#xff1a;" prop"datetimerangevalue"><el-date-pickerv-model"datetimerangevalue"value-format"YYYY-MM-DD HH:mm:ss"type"datetimerange"range-separator"至"start-p…

SQLAlchemy數據庫連接密碼特殊字符處理完全指南

引言 在使用SQLAlchemy連接數據庫時&#xff0c;我們通常使用URL格式指定連接信息&#xff0c;如mysqlpymysql://user:passwordhost:port/database。然而&#xff0c;當密碼中包含特殊字符&#xff08;如、#、$、!等&#xff09;時&#xff0c;會導致URL解析錯誤&#xff0c;進…

1.4 ARM安全參考架構(PSA Certified)

目錄1.4.1 PSA Certified概述1.4.2 PSA認證級別詳解1.4.3 PSA與TF-A的關系1.4.4 PSA安全模型實現信任根(RoT)架構關鍵安全服務&#xff1a;1.4.5 認證流程實踐1.4.6 典型應用案例參考資料1.4.1 PSA Certified概述 ARM Platform Security Architecture (PSA) Certified 是一套完…