精华内容
下载资源
问答
  • alloc

    千次阅读 2016-10-17 10:30:49
    函数alloc是可返回一个指向n个连续字符存储单元的指针,alloc函数的调用者可以利用该指针存储字符序列。 alloc函数的使用 编辑 函数afree(p)释放已经分配的存储空间,以便以后使用。之所以说这两个...

    函数alloc是可返回一个指向n个连续字符存储单元的指针,alloc函数的调用者可以利用该指针存储字符序列。


    alloc函数的使用

    编辑
    函数afree(p)释放已经分配的存储空间,以便以后使用。之所以说这两个函数是“不完善”的,是因为对afree函数的调用次序必须与调用alloc函数的次序相反。换句话说,alloc与afree以栈的方式(即后进先出的列表)进行存储空间的管理。
    最容易的实现方法是让alloc函数对一个大字符数组allocbuf中的空间进行分配。该数组是alloc和afree两个函数私有的数组。由于函数alloc和afree处理的对象是指针而不是数组下标,因此,其他函数无需知道该数组的名字,这样,可以在包含alloc和afree的源文件中将该数组声明为static类型,使得它对外不可见。
    实际实现时,该数组甚至可以没有名字,它可以通过调用malloc函数或者向操作系统申请一个指向无名存储块的指针获得。
    allocbuf中的空间使用情况:我们使用指针allocp指向allocbuf中的下一个空闲单元。当调用alloc申请n个字符的空间时,alloc检查allocbuf数组中有没有足够的剩余空间。如果有足够的空闲空间,则alloc返回allocp的当前值(即空闲块的开始位置),然后将allocp加上n 以使它指向下一个空闲区域。如果空闲空间不够,则alloc返回0。 如果p在allocbuf的边界之内,则afree(p)仅仅只是将allocp的值设置为p

    实例

    编辑
    #define ALLOCSIZE 1000 /* 可用空间大小 */
    static char allocbuf[ALLOCSIZE] /* alloc使用的存储区 */
    static char * allocp=allocbuf; /* 下一个空闲位置 */
    char *alloc(int n) /* 返回指向n个字符的指针 */
    {
    if(allocbuf+ALLOCSIZE-allocp>=n) /* 有足够的空闲空间 */
    {
    allocp+=n;
    return allocp-n; /* 分配前的指针p */
    }
    else /* 空闲空间不够 */
    {
    return 0;
    }
    }
    void afree(char * p) /* 释放p指向的存储区 */
    {
    if(p>=allocbuf && p< allocbuf + ALLOCSIZE)
    allocp=p;
    }
    [1] 

    展开全文
  • alloc.h头文件

    2020-06-09 02:00:50
    非标准头文件 alloc.h ,主要是区别malloc.h 两个头文件的区别,查看其而这区别 非标准头文件 alloc.h ,主要是区别malloc.h 两个头文件的区别,查看其而这区别
  • alloc 函数

    2016-06-04 09:09:00
    函数alloc是可返回一个指向n个连续字符存储单元的指针,alloc函数的调用者可以利用该指针存储字符序列。 #define ALLOCSIZE 1000 /* 可用空间大小 */ static char allocbuf[ALLOCSIZE] /* alloc使用的存储区 */ ...
    函数alloc是可返回一个指向n个连续字符存储单元的指针,alloc函数的调用者可以利用该指针存储字符序列。
     
    #define ALLOCSIZE 1000 /* 可用空间大小 */
    static char allocbuf[ALLOCSIZE] /* alloc使用的存储区 */
    static char * allocp=allocbuf; /* 下一个空闲位置 */
    char *alloc(int n) /* 返回指向n个字符的指针 */
    {
    if(allocbuf+ALLOCSIZE-allocp>=n) /* 有足够的空闲空间 */
    {
    allocp+=n;
    return allocp-n; /* 分配前的指针p */
    }
    else /* 空闲空间不够 */
    {
    return 0;
    }
    }
    void afree(char * p) /* 释放p指向的存储区 */
    {
    if(p>=allocbuf && p< allocbuf + ALLOCSIZE)
    allocp=p;
    }

     

    转载于:https://www.cnblogs.com/fantasy3588/p/5558142.html

    展开全文
  • aligned_alloc

    2020-03-08 20:28:48
    aligned_alloc()函数-C/C++ 函数签名 void *aligned_alloc(size_t alignment, size_t size); ​ 函数定义在<stdlib.h>中 ​ 第一个参数alignment规定了分配空间的起始地址对齐的位置,由于地址是二进制的因此...

    aligned_alloc()函数-C/C++

    函数签名

    void *aligned_alloc(size_t alignment, size_t size);
    

    ​ 函数定义在<stdlib.h>中

    ​ 第一个参数alignment规定了分配空间的起始地址对齐的位置,由于地址是二进制的因此alignment也必须是2的整数次方.

    ​ 比如alignedment=28=256alignedment= 2^{8} = 256时,分配地址的低8位为00000000.alignedment=210=1024alignedment= 2^{10} = 1024时,分配地址的低10位为0000000000.

    ​ 第二个参数size为分配的具体空间大小.规定size必须为alignment的整数倍.

    使用方法

    ​ 一般来讲分配的空间会大于实际需要的空间.由于不知道要分配数据类型在系统中的大小所以会将size = alignment * sizeof(数据类型).这就导致了分配空间大于实际需要的空间.

    ​ aligned_alloc()一般使用在intel的AVX指令集中,从内存中初始化向量.下面举两个例子说明如何使用该函数.

    1. 分配int数组空间

    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        int *p1 = (int *)malloc(10 * sizeof(int));
        printf("default-aligned addr:   %p\n", (void*)p1);
        free(p1);
     
        int *p2 = (int *)aligned_alloc(1024, 1024 * sizeof(int));
        printf("1024-byte aligned addr: %p\n", (void*)p2);
        free(p2);
    }
    

    第一个例子给int数组分配了一段空间,可以从结果看到aligned_alloc()分配的空间起始地址对齐了0x7fffcbf35800,运行结果见下:

    default-aligned addr:   0x7fffdd5c6260
    1024-byte aligned addr: 0x7fffdd5c7400
    

    2. 用aligned_alloc()分配的空间初始化向量

    #include <immintrin.h>
    #include "print.h"
    
    int main()
    {
        // 用float指针初始化向量
        int i;
        // 这个地方实际上多申请的很多空间
        float *aligned_float = (float *)aligned_alloc(32, 8 * 8 * sizeof(float));
        // 给申请的空间赋值
        for (i = 0; i < 8; ++i) aligned_float[i] = (float)(i) + 1;
        // 使用对齐的内存空间初始化AVX中的向量
        __m256 float_vec = _mm256_load_ps(aligned_float);
    
        return 0;
    }
    
    展开全文
  • 关于alloc

    2014-07-09 16:07:17
    1、alloc: 2、allocWithZone: (1)alloc与allocWithZone的区别: When one object creates another, it’s sometimes a good idea to make sure they’re both allocated from the same region of memory. The...

    一、各种alloc方法的比较

    1、alloc:


    2、allocWithZone:
    (1)alloc与
    allocWithZone的区别:
    When one object creates another, it’s sometimes a good idea to make sure they’re both allocated from the same region of memory. The zone method (declared in the NSObject protocol) can be used for this purpose; it returns the zone where the receiver is located.

    3、NSAllocateObject: 
    (1)
    NSAllocateObject与allocWithZone的区别:
    被分配的类可能是nsobject,也可能是root class(例如:
    NSProxy),所以直接使用NSAllocateObject。iOS下的root class就是NSObject,NSObject就是root class。
    这里有详细的解释:
    http://stackoverflow.com/questions/6203467/default-base-class-for-objective-c-classes 
    Q:    Do all objective c classes share a common default base class when a base class is not explicity defined in the class definition?

    A:No, if you do not explicitly define a super class in the class definition you are creating a root class.

    From Cocoa Core Competencies:

    A root class inherits from no other class and defines an interface and behavior common to all objects in the hierarchy below it. All objects in that hierarchy ultimately inherit from the root class. A root class is sometimes referred to as a base class.

    The root class of all Objective-C classes is NSObject, which is part of the Foundation framework. All objects in a Cocoa or Cocoa Touch application ultimately inherit from NSObject. This class is the primary access point whereby other classes interact with the Objective-C runtime. It also declares the fundamental object interface and implements basic object behavior, including introspection, memory management, and method invocation. Cocoa and Cocoa Touch objects derive the ability to behave as objects in large part from the root class.

    enter image description here

    The Foundation framework defines another root class, NSProxy, but this class is rarely used in Cocoa applications and never in Cocoa Touch applications. 



    二、[[NSObject alloc] init] vs[ NSObject new]
    转播:http://developerconceptions.wordpress.com/2011/04/26/nsobject-alloc-init-vs-nsobject-new/ ;

    [[NSObject alloc] init]
     seems a bit long for me. After all, why call two methods when you could just call one:[NSObject new]. But a bit further into the matter reveals that “In some classes, new methods manage a set of instances…” In other words, Apple added a layer of confusion by extending the new method to do things the new method really shouldn’t do.

    The skinny is, use [[NSObject alloc] init], not [NSObject new] because it’s an Apple coding convention and because [NSObject new] might not do what you would expect it to do.

    [http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/clm/NSObject/new reading]  

    References
    * [http://macresearch.org/difference-between-alloc-init-and-new difference between alloc init and new]
    * [http://stackoverflow.com/questions/719877/use-of-alloc-init-instead-of-new-objective-c use of alloc init instead of new objective c]

    ”’Edit”’: According to [http://thom.org.uk/ Thom Lawrence] in the comments, that may not actually be the case. It’s not a [NSObject new] that’s doing strange things but [NSObject newMyClassWithTag].

    The going theory supporting [[Foo alloc] init] usage is that there are generally more init... methods than new... methods. To create a new class in some places you could simply use [Bar new], but in other places you must use[[Foo alloc] initWithParam:param] because you need initWithParamwhere no newWithParam exists. To keep consistency within your own code you might as well always use [[Foo alloc] init]. Thanks for the update [http://thom.org.uk/ Thom].

    div.edit
    {
    margin:2px;
    padding:4px;
    border:1px solid gray;
    height:auto;
    width:auto;
    float:left;
    }

    三、[[Class alloc] init] vs [[[self class] alloc] init] vs [[self alloc] init]

    (本人英文不好,所以将英文原文贴在下面)

    一般情况下,在类的方法里,你可以直接使用  [[self alloc] init]。例如,为类写一个方法的推荐方式是

    + (id)fooWithBar:(Bar *)aBar
    {
        return [[[self alloc] initWithBar:aBar] autorelease];
    }

    (注意 在类的方法里,self指向class object。)


    然而,你也可以使用 [[Foo alloc] init](Foo是某个类的确切的名字),如果你想确切的得到Foo类的实例(而不是subclass)。


    我解释一下类的方法:

    Objective-C中的方法有两种:类方法(class method)和实例方法(instance method)。类方法被限定在类范围内,不能被类的实例调用(即脱离实例运行)。alloc就是一种类方法。实例方法限定在对象实例的范围内(即实例化之前不能运行)。init就是一种实例方法,被alloc方法返回的对象实例调用。

    instance method  以减号 "-" 开头


    class method  以加号 “+” 开头,相当于static方法

    英文原文:

    Generally, within a class method, you do use [[self alloc] init]. For example, the canonical way to write a convenience method for a class is:

    + (id)fooWithBar:(Bar *)aBar
    {
        return [[[self alloc] initWithBar:aBar] autorelease];
    }
    (Note that in a class method, self refers to the class object.)
    However, you would use [[Foo alloc] init] (that is, an explicit class name) if you actually want an instance of the Foo class (and not a subclass).

    原文地址:
    http://stackoverflow.com/questions/3559763/why-use-classname-alloc-instead-of-self-class-alloc





    展开全文
  • alloc | init

    2017-04-01 16:37:00
    - alloc | - init -alloc 已经返回了一个类实例,为什么还要调用 -init。 -alloc 、-init 职能 为什么要调用 -init 为什么要调用 [super init] - alloc 摘自官方文档: alloc Returns a new instance of the ...
  • alloc内部实现

    2018-08-13 11:16:44
    alloc内部通过list存储,在0-128大小没有cookie
  • dma_alloc_coherent 在 arm 平台上会禁止页表项中的 C (Cacheable) 域以及 B (Bufferable)域。而 dma_alloc_writecombine 只禁止 C (Cacheable) 域. C 代表是否使用高速缓冲存储器, 而 B 代表是否使用写缓冲区...
  • new alloc allocWithZone

    2017-03-26 10:28:34
    alloc, 分配内存区域,创建空对象new,首先alloc,然后调用init方法(无参数init)。(与Java的区别,Java如果构造函数定义了含参数的构造函数的话,无参构造函数会禁用,但是OC不会)allocWithZore, alloc会默认...
  • 前面说到在alloc_inode()函数中sb->s_op->alloc_inode()是指向sock_alloc_inode()函数的,关于这个函数指针是在什么时候指向sock_alloc_inode()函数的。 整体过程为: 1. sock_alloc(sock_mnt->mnt_sb) ...
  • new和alloc

    2016-07-17 19:59:39
    new和alloc/init功能上基本一样,都是分配内存并完成初始化。但是alloc可以调用其他的形如initXXX的初始化方法
  • 主要介绍了IOS 中 new 和 alloc init 的区别的相关资料,需要的朋友可以参考下
  • iOS alloc对象

    2015-03-03 19:48:23
    对象的alloc: 例如初始化myFraction对象; 合起来写: Fraction *myFraction = [[Fraction alloc] init];分开写: Fraction *myFraction; //声明 myFraction = [Fraction alloc]; //分配内存 myFraction = ...
  • C++中bad_alloc

    2020-08-06 15:52:58
    当分配内存的请求没有被成功执行时,系统会抛出一个用bad_alloc类来描述出的异常。 1 定义 bad_alloc类的定义如下所示 classbad_alloc: publicexception { bad_alloc(); virtual~bad_alloc(); bad_alloc...
  • kmem_cache_alloc()是申请slub对象的入口函数,他的核心实现就是slab_alloc_node函数,此函数涉及的面很广,包括cgroup,进程调度,内存管理,cpu抢占等细节,需要仔细推敲深究; 代码版本:kernel-3.10 (一)全...
  • 首先需要明确一点alloc_flags和gfp_mask之间的区别,gfp_mask是使用alloc_pages申请内存时所传递的申请标记,而alloc_flags是在内存管理子系统内部使用的另一个标记,二者是不同的,当然alloc_flags也是从gfp_mask...
  • mm: alloc_pages

    2020-05-25 00:49:10
    alloc_pages 是 linux kernel 上 最重要的 内存分配函数了,其实现机制也比较复杂 函数原型是 #define alloc_pages(gfp_mask, order) \ alloc_pages_node(numa_node_id(), gfp_mask, order) 代码流程 在 2.6.12 ...
  • <div><p>In addition to alloc_int can we have alloc_int32 or alloc_long? hx::Object * alloc_int(int arg1) { return Dynamic(arg1).GetPtr(); }</p><p>该提问来源于开源项目:HaxeFoundation/hxcpp</p></...
  • alloc init问题

    2016-12-03 13:37:04
    for (int i =0; i; i++) { btn =[[UIButton alloc]initWithFrame:CGRectMake(40+60*i, 100, 40, 40)]; btn.backgroundColor =[UIColor redColor]; btn.tag =100+i; [btn addTarget
  • STL的simple_alloc

    2018-06-11 14:47:00
    simple_alloc只是对配置器的简单包装 代码如下: 1 #include "__malloc_alloc_template.h" 2 #include "__defalut_alloc_template.h" 3 4 template<typename T, typename Alloc> 5 class ...
  • std::alloc具体细节

    2021-02-19 20:42:21
    G2.9 std::alloc的缺点: 1、在alloc::deallocate中没有将拿到的内存资源还给操作系统,在多任务中将占用很大资源 2、alloc::deallocate函数没有检查传入的p指针的有效性。在这里它默认p为alloc::allocate取得。 ...
  • 函数 aligned_alloc

    2015-11-27 09:42:58
    table.c:1094:3: warning: implicit declaration of function ‘aligned_alloc’ [-Wimplicit-function-declaration] uint8_t * buf = aligned_alloc(BARREL_ALIGN, BARREL_ALIGN); 虽然编译的时候能通过,但是...
  • framebuffer_alloc()

    千次阅读 2017-01-15 03:41:39
     framebuffer_alloc()功能是向内核申请一段大小为sizeof(struct fb_info) + size的空间,其中size的大小代表设备的私有数据空间,并用fb_info的par域指向该私有空间。 struct fb_info *framebuffer_alloc...
  • core::alloc::AllocRef` --> /root/.cargo/git/checkouts/teaclave-sgx-sdk-be25c2ad2f03718d/7f38d08/sgx_alloc/src/system.rs:25:32 | 25 | use core::alloc::{GlobalAlloc, AllocRef, AllocErr, Layout}...
  • 5 安装Alloc服务

    2017-02-24 17:04:00
    cnblogs-DOC 1.服务器环境 ...安装Alloc服务6.完整测试7.常见问题 一、Linux安装Mpush-Alloc [root@localhost app]# tar xf alloc-release-0.7.0.tar.gz [root@localhost app]# ln -s mpush-a...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,844
精华内容 19,937
关键字:

alloc