精华内容
下载资源
问答
  • Delphi7在Win2003安装后使用时点击菜单 Project/Options 提示错误: Access ... Write of address 0012F88FAccess violation at address 0012F9DB. Write of address 0012F9DBdgo 了一下,得到了相应的办法:依次点

    Delphi7在Win2003安装后使用时点击菜单 Project/Options 提示错误:

    Access violation at address 0012F88F. Write of address 0012F88F
    Access violation at address 0012F9DB. Write of address 0012F9DBd

    go 了一下,得到了相应的办法:

    依次点击“我的电脑” ->“属性”->“高级”->“性能”->“设置数据执行保护”
    将 C:/Program Files/Borland/Delphi7/Bin/delphi32.exe 设置为数据执行保护解决了此问题!

     

     

    展开全文
  • 内存的COPY ON WRITE机制

    万次阅读 2011-07-15 17:29:32
    刚了解到。赶快记下来。每个程序都有自己的数据段,代码段。。。补充:dll有自己的数据段,但没有自己的堆栈。...就是因为 内存的COPY ON WRITE 机制程序1调用这个dll,运行过程中,dll的数据段肯定会改变,那内存

    刚了解到。赶快记下来。

    每个程序都有自己的数据段,代码段。。。

    补充:dll有自己的数据段,但没有自己的堆栈。

    一个dll,被很多程序调用,为什么代码段共享,数据段不共享?就是因为 内存的COPY ON WRITE 机制

    程序1调用这个dll,运行过程中,dll的数据段肯定会改变,那内存就会被COPY一份,原来的依然存在不受影响。

    程序2调用这个dll,仍然用的是最开始的数据段,他往里写时再COPY一份,这就保证了两个程序互不影响。

    而代码段是一般不会被更改的,所以才来的代码段共享这个概念。

    如果用hook等技术,把代码改了,代码同样会被COPY一份之后再改,所以不会影响其它的进程,只会影响你改的进程。

     

    要实现进程1进程2数据共享,只能定义自己的段 ,全局变量和static变量因为内存COPY机制,不会起作用的。

    自己的段的定义方法:

     #pragma data_seg("share_data_seg")

        定义数据(必须初始化)

     #pragma data_seg()

    或者

    #pragma bbs_seg("share_data_seg")

      定义数据(不必初始化)

    #pragma bbs_seg()

    然后定义他的访问机制为rws: 表示具有读,写和共享属性

    #pragma comment(linker, "/section: share_data_seg rws")

    也可以给工程添加def文件,在里边定义。
    展开全文
  • python 多进程 内存 copy-on-write

    千次阅读 2015-09-29 10:19:08
    由于python 中有个GIL 的东西,所使用的线程 python线程对于 cpu密集型的应用是没有作用的 对于io...每次启动子进程,子进程初始内存大小和启动时刻主进程内存大小一样。这个是linux fork机制。 问题2: 当子进程没

    由于python  中有个GIL 的东西,所使用的线程

    python线程对于  cpu密集型的应用是没有作用的   对于io密集型的应用可以体现价值。如果想要利用多核就得使用多进程编程。

    python  进程在linux调用的时fork 


    问题1:

    每次启动子进程,子进程初始内存大小和启动时刻主进程内存大小一样。这个是linux   fork机制。


    问题2:

    当子进程没有对主进程进行修改时,程序总内存占用率是不变的。下图



    这个时候子进程没有对主进程任何内容进行修改,只是进行了短暂sleep     time.sleep(10)

    这个可以理解为  copy-on-write 

    这个是一个网站的解释

    http://unix.stackexchange.com/questions/58145/how-does-copy-on-write-in-fork-handle-multiple-fork

    里面一段话  copy出来  

    Nothing particular happens. All processes are sharing the same set of pages and each one gets its own private copy when it wants to modify a page.

    所有子进程和主进程共享同样的内存页 。当子进程修改内容时,将会获得一份属于自己的私有拷贝。








    展开全文
  • 深入理解linux下write()和read()函数

    万次阅读 多人点赞 2017-05-13 20:09:11
    函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。 返回值:如果顺利write()会返回实际写入的字节数(len)。当有错误发生时则返回-1,错误代码存入errno中。 附加说明: (1)...

    1、write()

    函数定义:ssize_t write (int fd, const void * buf, size_t count); 

    函数说明:write()会把参数buf所指的内存写入count个字节到参数fd所指的文件内。

    返回值:如果顺利write()会返回实际写入的字节数(len)。当有错误发生时则返回-1,错误代码存入errno中。

     

    附加说明:

    (1)write()函数返回值一般无0,只有当如下情况发生时才会返回0:write(fp, p1+len, (strlen(p1)-len))中第三参数为0,此时write()什么也不做,只返回0。man手册给出的write()返回值的说明如下:

    (2)write()函数从buf写数据到fd中时,若buf中数据无法一次性读完,那么第二次读buf中数据时,其读位置指针(也就是第二个参数buf)不会自动移动,需要程序员来控制,而不是简单的将buf首地址填入第二参数即可。如可按如下格式实现读位置移动:write(fp, p1+len, (strlen(p1)-len))。 这样write第二次循环时便会从p1+len处写数据到fp, 之后的也一样。由此类推,直至(strlen(p1)-len)变为0。

    (3)在write一次可以写的最大数据范围内(貌似是BUFSIZ ,8192),第三参数count大小最好为buf中数据的大小,以免出现错误。(经过笔者再次试验,write一次能够写入的并不只有8192这么多,笔者尝试一次写入81920000,结果也是可以,看来其一次最大写入数据并不是8192,但内核中确实有BUFSIZ这个参数,具体指什么还有待研究)

    以下通过一个例子具体说明write函数用法

    #include <string.h>
    #include <stdio.h>
    #include <fcntl.h>
    int main()
    {
      char *p1 = "This is a c test code";
      volatile int len = 0;
    
      int fp = open("/home/test.txt", O_RDWR|O_CREAT);
      for(;;)
      {
         int n;
    
         if((n=write(fp, p1+len, (strlen(p1)-len)))== 0)   //if((n=write(fp, p1+len, 3)) == 0) 
         {                                                 //strlen(p1) = 21
             printf("n = %d \n", n);
             break;
         }
         len+=n;
      }
      return 0;
    }

     

    此程序中的字符串"This is a c test code"有21个字符,经笔者亲自试验,若write时每次写3个字节,虽然可以将p1中数据写到fp中,但文件test.txt中会带有很多乱码。唯一正确的做法还是将第三参数设为(strlen(p1) - len,这样当write到p1末尾时(strlen(p1) - len将会变为0,此时符合附加说明(1)中所说情况,write返回0, write结束。 

    2、read()

    函数定义:ssize_t read(int fd, void * buf, size_t count);

    函数说明:read()会把参数fd所指的文件传送count 个字节到buf 指针所指的内存中。

    返回值:返回值为实际读取到的字节数, 如果返回0, 表示已到达文件尾或是无可读取的数据。若参数count 为0, 则read()不会有作用并返回0。另外,以下情况返回值小于count:

    (1)读常规文件时,在读到count个字节之前已到达文件末尾。例如,距文件末尾还有50个字节而请求读100个字节,则read返回50,下次read将返回0。

    (2)对于网络套接字接口,返回值可能小于count,但这不是错误,详细解释参考这篇文章https://blog.csdn.net/hhhlizhao/article/details/73912578

     

    注意:read时fd中的数据如果小于要读取的数据,就会引起阻塞。(关于read的阻塞情况评论区有朋友有不同意见,笔者查阅资料后作如下补充。)以下情况read不会引起阻塞:

    (1)常规文件不会阻塞,不管读到多少数据都会返回;

    (2)从终端读不一定阻塞:如果从终端输入的数据没有换行符,调用read读终端设备会阻塞,其他情况下不阻塞;

    (3)从网络设备读不一定阻塞:如果网络上没有接收到数据包,调用read会阻塞,除此之外读取的数值小于count也可能不阻塞,原因见上面链接。

    由于笔者水平有限,文中如有谬误之处还请读者朋友指出,以免误导大家。

    展开全文
  • 标准C++类std::string的内存共享和Copy-On-Write(写时拷贝),引用计数实现
  • outs.write(baos.toByteArray()) 内存溢出

    千次阅读 2016-01-04 17:46:18
    // 存在一个问题write() 没有办法写入超大的字节数组 // outs.write(baos.toByteArray()); byte[] buff = baos.toByteArray(); byte[] buff1 = new byte[buff.length / 2]; System.arraycopy(buff, 0, ...
  • std string的内存共享和Copy-On-Write技术

    千次阅读 2012-03-14 19:19:59
    看到google leveldb的代码大量使用std::string,想知道这个基础数据结构怎么实现的,看了下stl的string源代码,太烦了;...读完照例总结下:string对象间是会共享内存(与share memory是不同的概念)的,修改时使用了
  • 内存共享和Copy-On-Write技术  陈皓  1、 概念  Scott Meyers在《More Effective C++》中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在...
  • write drain

    千次阅读 2014-12-23 21:12:36
    之前的内存控制器将写缓冲在一个写队列中来允许读请求充分利用内存总吸纳,当写队列满时,或者达到某一个水位,内存调度其就或切换到write drain模式,这时它清空写队列【可能完全清空,也可能清空到某个程度】 在这...
  • 系统调用mmap()可以将某文件映射至内存(进程空间),如此可以把对文件的操作转为对内存的操作,以此避免更多的lseek()与read()、write()操作,这点对于大文件或者频繁访问的文件而言尤其受益。但有一点必须清楚:mmap...
  • ByteArrayOutputStream 缓冲区会自动增长,这个自动增长的过程,根据源码来看会有copyArray动作,所以整个write过程,消耗内存成倍增长。 源码如下: [java]   view plain   copy ...
  • Write-back和Write-through区别

    千次阅读 2013-07-09 14:14:01
    Write caching (即write-back)或 write-through write-through意思是写操作根本不使用缓存。数据总是直接写入磁盘。关闭写缓存,可释放缓存用于读操作。(缓存被读写操作共用) Write caching可以提高写操作的...
  • 全面理解Java内存模型

    万次阅读 多人点赞 2016-09-21 18:39:21
    Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存...
  • 内存映射的 I/O 空间读取数据。 readb 从 I/O 读取 8 位数据 ( 1 字节 ); readw 从 I/O 读取 16 位数据 ( 2 字节 ); readl 从 I/O 读取 32 位数据 ( 4 字节 )。 源文件定义位置:arch/$(ARCH)/kernel/io.c
  • Mysql双写_DoubleWrite

    千次阅读 2019-01-21 17:37:32
    原理:在内存中开辟了 doublewrite buffer 内存空间(2M),将脏页复制到doublewrite buffer 内存空间后, 先把doublewrite buffer的页数据写入到共享表空间ibdata1磁盘上,复制了页的副本完成之后, 再将 ...
  • Cache写机制:Write-through与Write-back

    千次阅读 2017-09-21 10:37:32
    无论是Write-through还是Write-back都可以使用写缺失的两种方式之一。只是通常Write-back采用Write allocate方式,而Write-through采用No-write allocate方式;因为多次写入同一缓存时,Write allocate配合Write-...
  • 在ARM开发板上跑如下测试程序的时候会概率性出现“Write Failed Bad address”: /* Write test */ #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #...
  • copy on write

    千次阅读 2011-08-25 11:56:25
    在复制一个对象的时候并不是真正的把原先的对象复制到内存的另外一个位置上,而是在新对象的内存映射表中设置一个指针,指向源对象的位置,并把那块内存的Copy-On-Write位设置为1.在对这个对象执行读操作的时候,...
  • 1、内存申请函数调用write_master->write_master_dim->write_master_bin_ops->write_master_bin_ops_loop->as_bin_particle_alloc_from_client:该函数对as_bin_s->particle进行申请内存,并将相关bin属性和值load到...
  • fread/write和 fwrite/write的区别

    千次阅读 2019-05-10 19:39:57
    2、fwrite属于库函数,write属于系统掉头 3、fread可以读一个机构,read在Linux/unix中读二进制与普通文件没有区别 4、fopen不能指定要创建文件的权限,open可以指定权限 5、fopen返回指针,open返回文件描述符...
  • 关于cache和write buffer

    千次阅读 2019-03-05 18:09:52
    cache和write buffer都是内置于CPU内部的一小段高速存储器,cache中保存着最近一段时间被CPU使用过的内存数据,而write buffer则是用来应对内存的写操作的,将原本要写向内存的数据暂写到wri...
  • 很显然,当然是在共享同一块内存的类发生内容改变时,才会发生Copy-On-Write。比如string类的[]、=、+=、+、操作符赋值,还有一些string类中诸如insert、replace、append等成员函数。   修改数据才会触发...
  • 很多人都在问Linux系统的write调用到底是不是原子的。网上能搜出一大堆文章,基本上要么是翻译一些文献,要么就是胡扯,本文中我来结合实例来试着做一个稍微好一点的回答。  先摆出结论吧。结论包含两点,即write...
  • 修饰词:assign、weak、strong、retain、copy、nonatomic、atomic、readonly、readwrite 其中 ARC:assign、weak、strong、copy MRC:assign、retain、copy、nonatomic、atomic assign ( ARC/MRC ) 1.这个...
  • 使用write函数遇到的问题

    千次阅读 2018-04-26 20:25:46
    buf:指定的缓冲区,即指针,指向一段内存单元; nbyte:要写入文件指定的字节数; 返回值:写入文档的字节数(成功);-1(出错) write函数把buf中nbyte写入文件描述符handle所指的文档,成功时返回写的字节数...
  • C语言中write函数

    万次阅读 2016-06-17 17:18:02
    write函数是C语言函数。 write函数所在的头文件为 write有两种用法。...buf是指定的缓冲区,即指针,指向一段内存单元; nbyte是要写入文件指定的字节数;返回值:写入文档的字节数(成功);-1(出错)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 546,757
精华内容 218,702
关键字:

内存write