cvstackalloc chrdev region怎么移植

学习OpenCV第0天 - 推酷
学习OpenCV第0天
自2011年接触OpenCV已经有几年了,一直停留在写一些小程序,利用手册完成一些任务,一直没有深入研究其中代码,如今毕业,但各种原因未能进入图像处理行业,故现重学OpenCV,包括分析代码,学习算法,blog不定时更写,欢迎交流。
搭建环境:VS2010+CV1.0
最新CV是3.0 alpha,但1.0结构简单,基础功能还是有的,而且本人比较熟悉C语言,故选择1.0。
官网下载1.0的安装文件,系统自动安装到C:\Program Files (x86),进入OpenCV目录,会发现有一个C:\Program Files (x86)\OpenCV\_make目录,里面有一个OpenCV.sln文件,这个很好辨认,用vs2010打开文件,因为是2008的工程文件,所以需要转换,还好没有报错,直接生成工程,使用Debug版本,因为原版是Release的,无法单步调试。
生成项目后,会在相应目录下看到文件名为d结尾的lib和dll,根据Vs配置OpenCV的原理(网上有很多,不再赘述),至此环境完成,只要新建项目,单步调试,就能一步步的观察函数的内部结构。
#include &cv.h&
#include &highgui.h&
int main()
IplImage * image = cvLoadImage(&e:\\1.jpg&,1);
cvNamedWindow(&原图&);
cvNamedWindow(&变换&);
cvShowImage(&原图&,image);
cvSmooth(image,image,CV_GAUSSIAN,3,3,0,0);
cvShowImage(&变换&,image);
cvWaitKey();
cvDestroyWindow(&原图&);
cvDestroyWindow(&变换&);
cvReleaseImage(I);
调试的话进入cvSmooth:
CV_IMPL void
cvSmooth( const void* srcarr, void* dstarr, int smooth_type,
int param1, int param2, double param3, double param4 )
CvBoxFilter box_
CvSepFilter gaussian_
CvMat* temp = 0;
CV_FUNCNAME( &cvSmooth& );
__BEGIN__;
int coi1 = 0, coi2 = 0;
CvMat srcstub, *src = (CvMat*)
CvMat dststub, *dst = (CvMat*)
int src_type, dst_type, depth,
double sigma1 = 0, sigma2 = 0;
bool have_ipp = icvFilterMedian_8u_C1R_p != 0;
CV_CALL( src = cvGetMat( src, &srcstub, &coi1 ));
CV_CALL( dst = cvGetMat( dst, &dststub, &coi2 ));
if( coi1 != 0 || coi2 != 0 )
CV_ERROR( CV_BadCOI, && );
src_type = CV_MAT_TYPE( src-&type );
dst_type = CV_MAT_TYPE( dst-&type );
depth = CV_MAT_DEPTH(src_type);
cn = CV_MAT_CN(src_type);
size = cvGetMatSize(src);
if( !CV_ARE_SIZES_EQ( src, dst ))
CV_ERROR( CV_StsUnmatchedSizes, && );
if( smooth_type != CV_BLUR_NO_SCALE && !CV_ARE_TYPES_EQ( src, dst ))
CV_ERROR( CV_StsUnmatchedFormats,
&The specified smoothing algorithm requires input and ouput arrays be of the same type& );
if( smooth_type == CV_BLUR || smooth_type == CV_BLUR_NO_SCALE ||
smooth_type == CV_GAUSSIAN || smooth_type == CV_MEDIAN )
// automatic detection of kernel size from sigma
if( smooth_type == CV_GAUSSIAN )
sigma1 = param3;
sigma2 = param4 ? param4 : param3;
if( param1 == 0 && sigma1 & 0 )
param1 = cvRound(sigma1*(depth == CV_8U ? 3 : 4)*2 + 1)|1;
if( param2 == 0 && sigma2 & 0 )
param2 = cvRound(sigma2*(depth == CV_8U ? 3 : 4)*2 + 1)|1;
if( param2 == 0 )
param2 = size.height == 1 ? 1 : param1;
if( param1 & 1 || (param1 & 1) == 0 || param2 & 1 || (param2 & 1) == 0 )
CV_ERROR( CV_StsOutOfRange,
&Both mask width and height must be &=1 and odd& );
if( param1 == 1 && param2 == 1 )
cvConvert( src, dst );
if( have_ipp && (smooth_type == CV_BLUR || smooth_type == CV_MEDIAN) &&
size.width &= param1 && size.height &= param2 && param1 & 1 && param2 & 1 )
CvSmoothFixedIPPFunc ipp_median_box_func = 0;
if( smooth_type == CV_BLUR )
ipp_median_box_func =
src_type == CV_8UC1 ? icvFilterBox_8u_C1R_p :
src_type == CV_8UC3 ? icvFilterBox_8u_C3R_p :
src_type == CV_8UC4 ? icvFilterBox_8u_C4R_p :
src_type == CV_32FC1 ? icvFilterBox_32f_C1R_p :
src_type == CV_32FC3 ? icvFilterBox_32f_C3R_p :
src_type == CV_32FC4 ? icvFilterBox_32f_C4R_p : 0;
else if( smooth_type == CV_MEDIAN )
ipp_median_box_func =
src_type == CV_8UC1 ? icvFilterMedian_8u_C1R_p :
src_type == CV_8UC3 ? icvFilterMedian_8u_C3R_p :
src_type == CV_8UC4 ? icvFilterMedian_8u_C4R_p : 0;
if( ipp_median_box_func )
CvSize el_size = { param1, param2 };
CvPoint el_anchor = { param1/2, param2/2 };
int stripe_size = 1 && 14; // the optimal value may depend on CPU cache,
// overhead of the current IPP code etc.
const uchar* shifted_
int y, dy = 0;
int temp_step, dst_step = dst-&
CV_CALL( temp = icvIPPFilterInit( src, stripe_size, el_size ));
shifted_ptr = temp-&data.ptr +
el_anchor.y*temp-&step + el_anchor.x*CV_ELEM_SIZE(src_type);
temp_step = temp-&step ? temp-&step : CV_STUB_STEP;
for( y = 0; y & src-& y += dy )
dy = icvIPPFilterNextStripe( src, temp, y, el_size, el_anchor );
IPPI_CALL( ipp_median_box_func( shifted_ptr, temp_step,
dst-&data.ptr + y*dst_step, dst_step, cvSize(src-&cols, dy),
el_size, el_anchor ));
if( smooth_type == CV_BLUR || smooth_type == CV_BLUR_NO_SCALE )
CV_CALL( box_filter.init( src-&cols, src_type, dst_type,
smooth_type == CV_BLUR, cvSize(param1, param2) ));
CV_CALL( box_filter.process( src, dst ));
else if( smooth_type == CV_MEDIAN )
if( depth != CV_8U || cn != 1 && cn != 3 && cn != 4 )
CV_ERROR( CV_StsUnsupportedFormat,
&Median filter only supports 8uC1, 8uC3 and 8uC4 images& );
IPPI_CALL( icvMedianBlur_8u_CnR( src-&data.ptr, src-&step,
dst-&data.ptr, dst-&step, size, param1, cn ));
else if( smooth_type == CV_GAUSSIAN )
CvSize ksize = { param1, param2 };
float* kx = (float*)cvStackAlloc( ksize.width*sizeof(kx[0]) );
float* ky = (float*)cvStackAlloc( ksize.height*sizeof(ky[0]) );
CvMat KX = cvMat( 1, ksize.width, CV_32F, kx );
CvMat KY = cvMat( 1, ksize.height, CV_32F, ky );
CvSepFilter::init_gaussian_kernel( &KX, sigma1 );
if( ksize.width != ksize.height || fabs(sigma1 - sigma2) & FLT_EPSILON )
CvSepFilter::init_gaussian_kernel( &KY, sigma2 );
KY.data.fl =
if( have_ipp && size.width &= param1*3 &&
size.height &= param2 && param1 & 1 && param2 & 1 )
CV_CALL( done = icvIPPSepFilter( src, dst, &KX, &KY,
cvPoint(ksize.width/2,ksize.height/2)));
if( done )
CV_CALL( gaussian_filter.init( src-&cols, src_type, dst_type, &KX, &KY ));
CV_CALL( gaussian_filter.process( src, dst ));
else if( smooth_type == CV_BILATERAL )
if( param1 & 0 || param2 & 0 )
CV_ERROR( CV_StsOutOfRange,
&Thresholds in bilaral filtering should not bee negative& );
param1 += param1 == 0;
param2 += param2 == 0;
if( depth != CV_8U || cn != 1 && cn != 3 )
CV_ERROR( CV_StsUnsupportedFormat,
&Bilateral filter only supports 8uC1 and 8uC3 images& );
IPPI_CALL( icvBilateralFiltering_8u_CnR( src-&data.ptr, src-&step,
dst-&data.ptr, dst-&step, size, param1, param2, cn ));
cvReleaseMat( &temp );
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致>> cxmisc.h
cxmisc.h ( 文件浏览 )
/*M///////////////////////////////////////////////////////////////////////////////////////
IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
By downloading, copying, installing or using the software you agree to this license.
If you do not agree to this license, do not download, install,
copy or use the software.
Intel License Agreement
For Open Source Computer Vision Library
// Copyright (C) 2000, Intel Corporation, all rights reserved.
// Third party copyrights are property of their respective owners.
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
* Redistribution's of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistribution's in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* The name of Intel Corporation may not be used to endorse or promote products
derived from this software without specific prior written permission.
// This software is provided by the copyright holders and contributors &as is& and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitu
// loss of use, data, or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
/* The header is mostly for internal use and it is likely to change.
It contains some macro definitions that are used in cxcore, cv, cvaux
and, probably, other libraries. If you need some of this functionality,
the safe way is to copy it into your code and rename the macros.
#ifndef _CXCORE_MISC_H_
#define _CXCORE_MISC_H_
#ifdef HAVE_CONFIG_H
#include &cvconfig.h&
#include &limits.h&
#ifdef _OPENMP
#include &omp.h&
/****************************************************************************************\
Compile-time tuning parameters
\****************************************************************************************/
/* maximal size of vector to run matrix operations on it inline (i.e. w/o ipp calls) */
CV_MAX_INLINE_MAT_OP_SIZE
/* maximal linear size of matrix to allocate it on stack. */
CV_MAX_LOCAL_MAT_SIZE
/* maximal size of local memory storage */
CV_MAX_LOCAL_SIZE
(CV_MAX_LOCAL_MAT_SIZE*CV_MAX_LOCAL_MAT_SIZE*(int)sizeof(double))
/* default image row align (in bytes) */
CV_DEFAULT_IMAGE_ROW_ALIGN
/* matrices are continuous by default */
CV_DEFAULT_MAT_ROW_ALIGN
/* maximum size of dynamic memory buffer.
cvAlloc reports an error if a larger block is requested. */
CV_MAX_ALLOC_SIZE
(((size_t)1 && (sizeof(size_t)*8-2)))
/* the alignment of all the allocated buffers */
CV_MALLOC_ALIGN
/* default alignment for dynamic data strucutures, resided in storages. */
CV_STRUCT_ALIGN
((int)sizeof(double))
/* default storage block size */
CV_STORAGE_BLOCK_SIZE
((1&&16) - 128)
/* default memory block for sparse array elements */
CV_SPARSE_MAT_BLOCK
/* initial hash table size */
CV_SPARSE_HASH_SIZE0
/* maximal average node_count/hash_size ratio beyond which hash table is resized */
CV_SPARSE_HASH_RATIO
/* max length of strings */
CV_MAX_STRLEN
/* maximum possible number of threads in parallel implementations */
#ifdef _OPENMP
#define CV_MAX_THREADS 128
#define CV_MAX_THREADS 1
#if 0 /*def
CV_CHECK_FOR_NANS*/
#define CV_CHECK_NANS( arr ) cvCheckArray((arr))
#define CV_CHECK_NANS( arr )
/****************************************************************************************\
Common declarations
\****************************************************************************************/
/* get alloca declaration */
/*#ifdef __GNUC__
#undef alloca
#define alloca __builtin_alloca
#elif defined WIN32 || defined WIN64
#if defined _MSC_VER || defined __BORLANDC__
#include &malloc.h&
#elif defined HAVE_ALLOCA_H
#include &alloca.h&
#elif defined HAVE_ALLOCA
#include &stdlib.h&
#define alloca malloc
/* ! DO NOT make it an inline function */
#define cvStackAlloc(size) cvAlignPtr( alloca((size) + CV_MALLOC_ALIGN), CV_MALLOC_ALIGN )
#if defined _MSC_VER || defined __BORLANDC__
#define CV_BIG_INT(n)
#define CV_BIG_UINT(n)
#define CV_BIG_INT(n)
#define CV_BIG_UINT(n)
#define CV_IMPL CV_EXTERN_C
#if defined WIN32 && !defined WIN64 && (_MSC_VER &= 1200 || defined CV_ICC)
#define CV_DBG_BREAK() __asm int 3
#define CV_DBG_BREAK() assert(0);
/* default step, set in case of continuous data
to work around checks for valid step in some ipp functions */
CV_STUB_STEP
CV_SIZEOF_FLOAT ((int)sizeof(float))
CV_SIZEOF_SHORT ((int)sizeof(short))
CV_ORIGIN_TL
CV_ORIGIN_BL
/* IEEE754 constants and macros */
CV_POS_INF
0x7f800000
CV_NEG_INF
0x807fffff /* CV_TOGGLE_FLT(0xff800000) */
0x3f800000
CV_TOGGLE_FLT(x) ((x)^((int)(x) & 0 ? 0x7fffffff : 0))
CV_TOGGLE_DBL(x) \
((x)^((int64)(x) & 0 ? CV_BIG_INT(0x7fffffffffffffff) : 0))
CV_ADD(a, b)
((a) + (b))
CV_SUB(a, b)
((a) - (b))
CV_MUL(a, b)
((a) * (b))
CV_AND(a, b)
((a) & (b))
CV_OR(a, b)
((a) | (b))
CV_XOR(a, b)
((a) ^ (b))
CV_ANDN(a, b)
(~(a) & (b))
CV_ORN(a, b)
(~(a) | (b))
((a) * (a))
CV_LT(a, b)
((a) & (b))
CV_LE(a, b)
((a) &= (b))
CV_EQ(a, b)
((a) == (b))
CV_NE(a, b)
((a) != (b))
CV_GT(a, b)
((a) & (b))
CV_GE(a, b)
((a) &= (b))
CV_NONZERO(a)
((a) != 0)
CV_NONZERO_FLT(a)
(((a)+(a)) != 0)
/* general-purpose saturation macros */
CV_CAST_8U(t)
(uchar)(!((t) & ~255) ? (t) : (t) & 0 ? 255 : 0)
CV_CAST_8S(t)
(char)(!(((t)+128) & ~255) ? (t) : (t) & 0 ? 127 : -128)
CV_CAST_16U(t) (ushort)(!((t) & ~65535) ? (t) : (t) & 0 ? 65535 : 0)
CV_CAST_16S(t) (short)(!(((t)+32768) & ~65535) ? (t) : (t) & 0 ? 32767 : -32768)
CV_CAST_32S(t) (int)(t)
CV_CAST_64S(t) (int64)(t)
CV_CAST_32F(t) (float)(t)
CV_CAST_64F(t) (double)(t)
CV_PASTE2(a,b) a##b
CV_PASTE(a,b)
CV_PASTE2(a,b)
CV_MAKE_STR(a) #a
CV_DEFINE_MASK
float maskTab[2]; maskTab[0] = 0.f; maskTab[1] = 1.f;
CV_ANDMASK( m, x )
((x) & (((m) == 0) - 1))
/* (x) * ((m) == 1 ? 1.f : (m) == 0 ? 0.f : &ERR& */
CV_MULMASK( m, x )
(maskTab[(m) != 0]*(x))
/* (x) * ((m) == -1 ? 1.f : (m) == 0 ? 0.f : &ERR& */
CV_MULMASK1( m, x )
(maskTab[(m)+1]*(x))
CV_ZERO_OBJ(x)
memset((x), 0, sizeof(*(x)))
CV_DIM(static_array) ((int)(sizeof(static_array)/sizeof((static_array)[0])))
CV_UN_ENTRY_C1(worktype)
worktype s0 = scalar[0]
CV_UN_ENTRY_C2(worktype)
worktype s0 = scalar[0], s1 = scalar[1]
CV_UN_ENTRY_C3(worktype)
worktype s0 = scalar[0], s1 = scalar[1], s2 = scalar[2]
CV_UN_ENTRY_C4(worktype)
worktype s0 = scalar[0], s1 = scalar[1], s2 = scalar[2], s3 = scalar[3]
cvUnsupportedFormat &Unsupported format&
CV_INLINE void* cvAlignPtr( const void* ptr, int align=32 )
assert( (align & (align-1)) == 0 );
return (void*)( ((size_t)ptr + align - 1) & ~(size_t)(align-1) );
CV_INLINE int cvAlign( int size, int align )
assert( (align & (align-1)) == 0 && size & INT_MAX );
return (size + align - 1) & -
cvGetMatSize( const CvMat* mat )
CvSize size = {
mat-&width, mat-&height
CV_DESCALE(x,n)
(((x) + (1 && ((n)-1))) && (n))
CV_FLT_TO_FIX(x,n)
cvRound((x)*(1&&(n)))
/* This is a small engine for performing fast division of multiple numbers
by the same constant. Most compilers do it too if they know the divisor value
at compile-time. The algorithm was taken from Agner Fog's optimization guide
at http://www.agner.org/assem */
typedef struct CvFastDiv
unsigned delta, scale,
#define CV_FAST_DIV_SHIFT 32
CV_INLINE CvFastDiv cvFastDiv( int divisor )
assert( divisor &= 1 );
uint64 temp = ((uint64)1 && CV_FAST_DIV_SHIFT)/
fastdiv.divisor =
fastdiv.delta = (unsigned)(((temp & 1) ^ 1) + divisor - 1);
fastdiv.scale = (unsigned)((temp + 1) && 1);
#define CV_FAST_DIV( x, fastdiv )
((int)(((int64)((x)*2 + (int)(fastdiv).delta))*(int)(fastdiv).scale&&CV_FAST_DIV_SHIFT))
#define CV_FAST_UDIV( x, fastdiv )
(文件超长,未完全显示,请下载后阅读剩余部分)
展开> <收缩
下载源码到电脑,阅读使用更方便
还剩0行未阅读,继续阅读 ▼
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
cxcore.paf217.97 kB09-07-08 10:51
cxcore.pjt1.46 kB08-07-08 12:51
cxcore.sbl8.04 kB03-07-08 13:22
Debug.lkf1.43 kB09-07-08 08:49
2.37 kB12-10-06 22:42
73.22 kB03-07-08 13:42
12.38 kB03-07-08 13:07
8.67 kB08-07-08 10:16
47.23 kB02-07-08 09:45
52.21 kB03-07-08 13:04
223.00 B09-08-06 15:16
14.08 kB06-10-06 14:36
4.20 kB02-07-08 10:50
83.63 kB05-07-06 17:43
92.67 kB09-07-08 08:48
59.21 kB01-08-06 21:24
75.68 kB30-06-06 11:40
34.18 kB24-05-06 12:51
107.14 kB20-06-06 16:41
81.71 kB02-07-08 10:59
123.67 kB01-09-06 19:56
13.80 kB02-07-08 10:56
11.82 kB08-08-06 16:03
14.59 kB28-09-06 18:42
27.25 kB05-12-05 20:26
13.20 kB28-11-05 20:11
77.47 kB18-07-06 12:49
164.90 kB25-07-06 12:28
68.54 kB22-08-06 12:33
19.33 kB23-09-05 11:52
38.25 kB23-09-05 11:52
19.71 kB04-08-06 18:52
67.17 kB12-10-04 19:02
100.99 kB18-08-04 17:40
152.22 kB03-07-08 13:19
2.12 kB18-08-04 17:40
26.56 kB06-12-05 18:33
45.34 kB18-10-06 21:48
42.13 kB10-08-06 14:34
13.46 kB05-07-06 17:54
21.68 kB06-09-06 20:19
46.00 B17-07-06 20:21
410.00 B18-08-04 17:40
11.45 kB03-08-06 15:14
39.04 kB18-10-06 21:48
cc_build_Debug.log617.00 B09-07-08 10:22
cv.paf238.78 kB09-07-08 10:51
cv.pjt2.46 kB08-07-08 12:51
cv.sbl12.46 kB08-07-08 15:59
Debug.lkf2.74 kB09-07-08 10:22
53.98 kB27-09-06 20:02
15.76 kB06-09-06 15:40
40.76 kB12-07-06 19:47
4.08 kB13-07-06 18:17
12.57 kB22-11-05 21:42
cv.suo8.50 kB16-06-08 16:24
34.50 kB03-12-04 17:47
4.91 kB30-05-06 16:37
31.35 kB12-09-06 17:03
12.29 kB13-10-04 14:42
4.51 kB18-08-04 17:47
38.15 kB09-07-08 10:21
57.42 kB29-06-06 14:57
9.67 kB25-09-06 20:18
12.17 kB19-09-06 16:09
105.79 kB27-05-05 22:22
10.13 kB05-12-05 20:30
48.45 kB06-12-05 18:32
25.01 kB05-12-05 20:30
25.76 kB03-08-06 20:51
2.12 kB22-11-05 21:42
24.96 kB13-10-06 19:36
8.66 kB24-05-06 17:27
36.60 kB06-09-06 15:45
22.54 kB04-05-06 13:47
11.98 kB05-12-05 20:30
35.53 kB02-07-08 11:13
7.29 kB28-11-05 20:16
103.35 kB13-10-06 18:45
41.33 kB29-05-06 20:41
39.79 kB11-09-06 16:46
10.68 kB27-06-06 16:25
79.26 kB02-07-08 11:16
74.80 kB02-07-08 11:13
36.50 kB27-09-06 20:01
96.90 kB18-10-06 19:52
33.43 kB26-09-06 20:43
8.08 kB05-12-05 20:30
18.65 kB18-10-06 19:13
36.20 kB31-08-06 20:10
12.21 kB05-12-05 20:30
27.55 kB05-12-05 20:30
44.06 kB07-09-06 15:57
17.28 kB04-08-06 20:32
21.45 kB05-12-05 20:30
19.91 kB05-12-05 20:30
21.66 kB05-12-05 20:30
16.27 kB05-12-05 20:30
12.83 kB05-12-05 20:30
2.12 kB15-10-02 03:52
76.11 kB04-09-06 19:19
58.37 kB02-07-08 11:15
15.20 kB03-07-06 21:08
46.41 kB05-09-06 20:26
19.01 kB30-06-06 13:52
37.58 kB17-10-06 16:49
36.88 kB13-10-06 18:57
15.67 kB04-08-06 20:25
24.29 kB13-10-06 19:43
22.91 kB28-06-05 20:05
2.49 kB18-10-06 12:43
14.53 kB05-07-06 17:34
19.54 kB07-09-06 20:45
14.71 kB03-08-06 20:06
11.42 kB28-09-06 21:15
17.78 kB22-06-06 17:54
152.42 kB03-07-08 10:07
46.00 B17-07-06 20:21
406.00 B28-11-02 02:50
4.01 kB05-07-06 17:33
4.06 kB27-05-05 22:22
4.71 kB23-06-06 19:25
36.94 kB13-10-06 18:58
11.40 kB05-12-05 20:30
11.47 kB05-12-05 20:30
&include&0.00 B08-07-08 10:16
&src&0.00 B09-07-08 08:48
&include&0.00 B02-07-08 11:01
&src&0.00 B09-07-08 10:21
&cxcore&0.00 B25-08-08 09:26
&cv&0.00 B25-08-08 09:26
Sponsored links
23 篇源代码 21 篇源代码 18 篇源代码 13 篇源代码 9 篇源代码
285 篇源代码 173 篇源代码 48 篇源代码 42 篇源代码 36 篇源代码
评价成功,多谢!
CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了
您的积分不足
支付宝优惠套餐快速获取 30 积分
10积分 / ¥100
30积分 / ¥200原价 ¥300 元
100积分 / ¥500原价 ¥1000 元
订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。
支付宝支付宝付款
微信钱包微信付款
更多付款方式:、
您本次下载所消耗的积分将转交上传作者。
同一源码,30天内重复下载,只扣除一次积分。
鲁ICP备号-2
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
^_^"呃 ...
Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧}

我要回帖

更多关于 virtualalloc 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信