最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解c語言實現(xiàn)的內(nèi)存池(適用于兩個線程、不加鎖、效率高)

 更新時間:2024年02月07日 09:04:56   作者:yanghehuanglu  
這篇文章主要介紹了c語言實現(xiàn)的內(nèi)存池(適用于兩個線程、不加鎖、效率高),設計一個內(nèi)存池,要求效率比系統(tǒng)調(diào)用的效率要高(測試1萬次),同時支持一個線程申請,另外一個線程釋放,需要的朋友可以參考下

目的:

設計一個內(nèi)存池,要求效率比系統(tǒng)調(diào)用的效率要高(測試1萬次),同時支持一個線程申請,另外一個線程釋放。

設計思路:

因為涉及到兩個線程的申請和釋放,前期考慮加鎖的方式來實現(xiàn),但是加鎖后效率比系統(tǒng)調(diào)用的效率還要低,沒有什么意義。所以當前的設計思路是這樣的:

1,用一個單向鏈表來維護內(nèi)存池

2,用一個[3][101]的二維數(shù)組存儲待釋放的內(nèi)存的指針。每行的第一元素表示該行是否填滿了,之后的每個元素存儲的是待釋放內(nèi)存的指針。

3,每次釋放內(nèi)存的時候并沒有真正的釋放,只是將內(nèi)存的指針填入上述數(shù)組。待填滿這一行后,將該行的第一個元素置為1。

4,在申請內(nèi)存時候遍歷這3行的第一個元素,看是否為1,如果為1,則將該行的指針全部釋放,并memset改行。

這樣真正的申請和釋放都是在一個線程的,并且兩個線程分別操作數(shù)組的不同行,不用加鎖。

線程池源碼:

memory_pool.h代碼:

#ifndef _MEMORY_POOL_H_
#define _MEMORY_POOL_H_
#define MP_ALIGNMENT       		64  // 內(nèi)存對齊字節(jié)數(shù),按照32個字節(jié)進行字節(jié)對齊
#define BLOCK_MEM_LEN     		128  // 內(nèi)存塊中申請內(nèi)存的大小
#define FIRST_DIMENSION    		3  // 待釋放數(shù)組第一維
// 內(nèi)存塊結構
struct mp_block_s {
	struct mp_block_s *next; // 后向指針
	char data[BLOCK_MEM_LEN];
};
// 內(nèi)存池結構
struct mp_pool_s {
	struct mp_block_s *idle; // 空閑的塊
	// 待釋放的指針地址數(shù)組,數(shù)組的第二維的第一個是標志位,表示是否已寫滿
	long to_be_released[FIRST_DIMENSION][101];
	// 下一個存放待釋放的指針的索引
	int release_index;
};
struct mp_pool_s *mp_create_pool(size_t size);
void mp_free_pool(struct mp_pool_s *pool);
struct mp_block_s *mp_alloc(struct mp_pool_s *pool);
void mp_free(struct mp_pool_s *pool, struct mp_block_s *block);
void statistics(struct mp_pool_s *pool);     
#endif 

memory_pool.c代碼

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include "memory_pool.h"
void poll_for_release(struct mp_pool_s *pool);
void release_mem_block(struct mp_pool_s *pool, struct mp_block_s *block);
void statistics(struct mp_pool_s *pool);
/************************************************************************************************************************
 * 函數(shù)功能:創(chuàng)建內(nèi)存池
 * 參數(shù)說明: size       ------------ 創(chuàng)建內(nèi)存塊的個數(shù)
 * 返 回 值: 創(chuàng)建的內(nèi)存池的指針
 ************************************************************************************************************************/
struct mp_pool_s *mp_create_pool(size_t size) 
{
	struct mp_pool_s *pool;
	int ret = posix_memalign((void **)&pool, MP_ALIGNMENT, sizeof(struct mp_pool_s) + sizeof(struct mp_block_s) * size);
	if (ret) {
		return NULL;
	}
	memset(pool, 0, sizeof(struct mp_pool_s) + sizeof(struct mp_block_s) * size);
	struct mp_block_s * block = (struct mp_block_s *)((char *)pool + sizeof(struct mp_pool_s));
	pool->idle = block;
	block->next = NULL;
	struct mp_block_s * tmp = block;
	for (int i = 1; i < size; i++) {
		block = (struct mp_block_s *)((char *)pool + sizeof(struct mp_pool_s) + sizeof(struct mp_block_s) * i);
		tmp->next = block;
		block->next = NULL;
		tmp = block;	
	} 
	// 初始化待釋放內(nèi)存數(shù)組
	memset(pool->to_be_released, 0, FIRST_DIMENSION*101*(sizeof(long)));
	pool->release_index = 1;
	return pool;
}
/************************************************************************************************************************
 * 函數(shù)功能:釋放內(nèi)存池
 * 參數(shù)說明: size       ------------ 創(chuàng)建內(nèi)存塊的個數(shù)
 * 返 回 值: 創(chuàng)建的內(nèi)存池的指針
 ************************************************************************************************************************/
void mp_free_pool(struct mp_pool_s *pool) 
{
	// statistics(pool);
	free(pool);
}
/************************************************************************************************************************
 * 函數(shù)功能:申請內(nèi)存
 * 參數(shù)說明: pool       ------------ 內(nèi)存池指針
 * 返 回 值: 無
 ************************************************************************************************************************/ 
struct mp_block_s *mp_alloc(struct mp_pool_s *pool) 
{
	if (!pool->idle) {
		printf("mem is null\n");
		return NULL;
	}
	// 從idle鏈刪除,刪除首節(jié)點
	struct mp_block_s *block = pool->idle;	
	pool->idle = block->next;
	// 檢查是否有需要釋放的內(nèi)存
	poll_for_release(pool);
	return block;
}
/************************************************************************************************************************
 * 函數(shù)功能:釋放內(nèi)存
 * 參數(shù)說明: pool       ------------ 內(nèi)存池指針
 * 返 回 值: 無
 ************************************************************************************************************************/ 
void release_mem_block(struct mp_pool_s *pool, struct mp_block_s *block) 
{
	// 加入到idle鏈
	if (pool->idle) {
		block->next = pool->idle;
		pool->idle = block;
	} else {
		pool->idle = block;
		pool->idle->next = NULL;
	}
}
/************************************************************************************************************************
 * 函數(shù)功能:并沒有真正的釋放,只是將當前的內(nèi)存塊的地址添加到待釋放數(shù)組
 * 參數(shù)說明: pool       ------------ 內(nèi)存池指針
 * 返 回 值: 無
 ************************************************************************************************************************/ 
void mp_free(struct mp_pool_s *pool, struct mp_block_s *block) 
{
	// 數(shù)組的第一維
	int first_dimension = pool->release_index / 101;
	// 數(shù)組的第二維
	int second_dimension = pool->release_index % 101;
	pool->to_be_released[first_dimension][second_dimension] = (long)block;
	if (second_dimension == 100) {
		// 標志置為1表示這行滿了
		pool->to_be_released[first_dimension][0] = 1;
		pool->release_index = pool->release_index + 2;
	} else {
		pool->release_index++;
	}
	// 如果記錄到最后一個了就要從第一個開始記錄
	if (pool->release_index == (FIRST_DIMENSION * 101 + 1)) {
		pool->release_index = 1;
	}
}
/************************************************************************************************************************
 * 函數(shù)功能:遍歷待釋放數(shù)組,看是否需要真正釋放內(nèi)存。
 * 參數(shù)說明: pool       ------------ 內(nèi)存池指針
 * 返 回 值: 無
 ************************************************************************************************************************/ 
void poll_for_release(struct mp_pool_s *pool) 
{
	for (int i = 0; i < FIRST_DIMENSION; i++) {
		if (pool->to_be_released[i][0]) {
			for (int j = 0; j < 100; j++) {
				release_mem_block(pool, (struct mp_block_s *)(pool->to_be_released[i][j + 1]));				
			}
			memset(pool->to_be_released[i], 0, 101 * sizeof(long));
		}
	}
}
/************************************************************************************************************************
 * 函數(shù)功能:統(tǒng)計idle和allocated的數(shù)量
 * 參數(shù)說明: pool       ------------ 內(nèi)存池指針
 * 返 回 值: 無
 ************************************************************************************************************************/ 
void statistics(struct mp_pool_s *pool) 
{
	int idle = 0;
	struct mp_block_s *block = pool->idle;
	while(block) {
		// printf("statistics, idle, block = %p, block->next = %p\n", block, block->next);
		block = block->next;
		idle++;		
	}
	printf("idle = %d\n", idle);
	for (int i = 0; i < FIRST_DIMENSION; i++) {
		for (int j = 0; j < 101; j++) {
			printf("%p, ", (void*)(pool->to_be_released[i][j]));
		}
		printf("\n");
	}
}

測試代碼:

 memory_pool_test.c 代碼:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include "memory_pool.h"
int timespec_minus(struct timespec *a, struct timespec *b)
{
    return (a->tv_sec - b->tv_sec) * 1000000 + (int)((a->tv_nsec - b->tv_nsec)/1000);
}
int main(int argc, char *argv[]) {	
	int size = 1024;
	printf("size = %d\n", size);
	struct mp_pool_s *pool = mp_create_pool(size);
	printf("mp_create_pool over\n");
	// statistics(pool);
	struct timespec before, after;
	clock_gettime(CLOCK_MONOTONIC, &before);
	struct mp_block_s *block = NULL;
	int i = 0;
	for (i = 0;i < 10000;i ++) {
		block = mp_alloc(pool);		
		mp_free(pool, block);
		// if (i % 100 == 0) {
		// 	statistics(pool);
		// }
	}
	// statistics(pool);
    clock_gettime(CLOCK_MONOTONIC, &after);
    int delay = timespec_minus(&after, &before);
    printf("mempool malloc 10000 times : %d microsecond\n", delay);
	mp_free_pool(pool);
	clock_gettime(CLOCK_MONOTONIC, &before);
	char * p = NULL;
	for (i = 0;i < 10000;i ++) {
		p = malloc(128);
		free(p);
	}
    clock_gettime(CLOCK_MONOTONIC, &after);
    delay = timespec_minus(&after, &before);
    printf("system malloc 10000 times : %d microsecond\n", delay);
	return 0;
}
 

測試結果:

(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# make
cc os_mutex.c memory_pool.c memory_pool_test.c -o memory_pool_test -lpthread
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 154 microsecond
system malloc 10000 times : 366 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 136 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 163 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 136 microsecond
system malloc 10000 times : 334 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 154 microsecond
system malloc 10000 times : 349 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 298 microsecond
system malloc 10000 times : 351 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 143 microsecond
system malloc 10000 times : 342 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 139 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 164 microsecond
system malloc 10000 times : 350 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 191 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 308 microsecond
system malloc 10000 times : 542 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 178 microsecond
system malloc 10000 times : 355 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 304 microsecond
system malloc 10000 times : 349 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 327 microsecond
system malloc 10000 times : 453 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 213 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 306 microsecond
system malloc 10000 times : 578 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 160 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 334 microsecond
system malloc 10000 times : 355 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 189 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 204 microsecond
system malloc 10000 times : 349 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 384 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 295 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 306 microsecond
system malloc 10000 times : 509 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 151 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 189 microsecond
system malloc 10000 times : 364 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 146 microsecond
system malloc 10000 times : 332 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 190 microsecond
system malloc 10000 times : 337 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 159 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 204 microsecond
system malloc 10000 times : 341 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 188 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 213 microsecond
system malloc 10000 times : 341 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 138 microsecond
system malloc 10000 times : 342 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 146 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 324 microsecond
system malloc 10000 times : 550 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 143 microsecond
system malloc 10000 times : 344 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 278 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 149 microsecond
system malloc 10000 times : 341 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 146 microsecond
system malloc 10000 times : 336 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 150 microsecond
system malloc 10000 times : 344 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 324 microsecond
system malloc 10000 times : 369 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 223 microsecond
system malloc 10000 times : 336 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 208 microsecond
system malloc 10000 times : 335 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 146 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# ./memory_pool_test
size = 1024
mp_create_pool over
mempool malloc 10000 times : 151 microsecond
system malloc 10000 times : 333 microsecond
(base) root@liyan-virtual-machine:/home/zhangmeng/test/memory_pool# 

測試結論:

1,能夠解決兩個線程互斥的問題

2,用自己實現(xiàn)的內(nèi)存池測試10000次的平均時間是:207微秒,用系統(tǒng)malloc/free測試10000次的平均時間是:377微秒,時間約為系統(tǒng)調(diào)用時間的54%。而且解決了碎片問題。

備注:

一般設計的內(nèi)存池都是有局限性的,只能適用于某個場景,當前這個內(nèi)存池只適用于一個線程申請,另外一個線程釋放的場景。

到此這篇關于c語言實現(xiàn)的內(nèi)存池(適用于兩個線程、不加鎖、效率高)的文章就介紹到這了,更多相關c語言內(nèi)存池內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解C語言基礎的類型轉(zhuǎn)換

    詳解C語言基礎的類型轉(zhuǎn)換

    這篇文章主要為大家介紹了C語言基礎的類型轉(zhuǎn)換,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 最小生成樹算法C語言代碼實例

    最小生成樹算法C語言代碼實例

    這篇文章主要介紹了最小生成樹算法C語言代碼實例,有需要的朋友可以參考一下
    2013-12-12
  • c語言實現(xiàn)MD5算法的項目實踐

    c語言實現(xiàn)MD5算法的項目實踐

    MD5用于確保信息傳輸完整一致,是計算機廣泛使用的雜湊算法之一,本文主要介紹了c語言實現(xiàn)MD5算法,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08
  • C++實現(xiàn)LeetCode(124.求二叉樹的最大路徑和)

    C++實現(xiàn)LeetCode(124.求二叉樹的最大路徑和)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(124.求二叉樹的最大路徑和),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言實現(xiàn)簡單的貪吃蛇游戲

    C語言實現(xiàn)簡單的貪吃蛇游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單的貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 用C語言完整實現(xiàn)2048游戲

    用C語言完整實現(xiàn)2048游戲

    2048是一款數(shù)字益智游戲,初始數(shù)字則是由2+2組成的基數(shù)4。在操作方面的不同則表現(xiàn)為一步一格的移動,變成更為爽快的一次到底。相同數(shù)字的方?jīng)r在靠攏、相撞時會相加。系統(tǒng)給予的數(shù)字方塊不是2就是4,玩家要想辦法在這小小的16格范圍中湊出2048這個數(shù)字方塊
    2021-11-11
  • C語言中的分支語句用法解讀

    C語言中的分支語句用法解讀

    這篇文章主要介紹了C語言中的分支語句用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • C++中預編譯指令的實現(xiàn)

    C++中預編譯指令的實現(xiàn)

    本文主要介紹了C++中預編譯指令的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-02-02
  • C/C++?控制臺等待指令解析

    C/C++?控制臺等待指令解析

    這篇文章主要介紹了C/C++?控制臺等待指令解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Qt(C++)調(diào)用工業(yè)相機Basler的SDK使用示例

    Qt(C++)調(diào)用工業(yè)相機Basler的SDK使用示例

    這篇文章主要介紹了Qt(C++)調(diào)用工業(yè)相機Basler的SDK使用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03

最新評論

天柱县| 仲巴县| 锡林郭勒盟| 永顺县| 辛集市| 湘潭县| 长顺县| 和顺县| 绥江县| 泗洪县| 临江市| 元朗区| 沙洋县| 旺苍县| 大同市| 突泉县| 呈贡县| 鄂伦春自治旗| 灵寿县| 沅陵县| 潞西市| 日喀则市| 麦盖提县| 琼结县| 监利县| 平顺县| 达州市| 大厂| 广河县| 增城市| 长岭县| 广德县| 邵东县| 错那县| 谢通门县| 博湖县| 伊宁县| 巴马| 常德市| 商丘市| 高碑店市|