memcpy的小疑点
memcpy的小问题
------解决方案--------------------
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
------解决方案--------------------
memcpy(pBuf, &psm, sizeof(psm));
执行后pBuf所指的四个字节中保存的是psm指针本身的地址
相当于这样 *(int)pBuf = *(int*)&psm
------解决方案--------------------

没听懂你意思,
大概你就是想说 拷贝一块内存,拷贝地址干嘛?
其实 CPU有两个寄存器 SS,SP ;(赵老师回复的并不无道理),如果发现时地址,SS指段,SP指位。然后发现时内存位置,就会去读,正如你所说的,发现PSM是一块地址,好解析地址,发现PSM里面藏着一个地址,好在跳。。跳过去了。。
不知道你说的是这个吗?
指针的强大无与伦比。哼哼
------解决方案--------------------
楼上,别理会太多了,汇编也不是什么神物,无非有几个串指令用来加速内存操作罢了
谁学汇编不得写几个小程序玩这个啊
我们不能像原始人那样纸带打孔编程,所以才会有memcpy,才会有operator=
抽象层次不同,解决的问题也不会一样的
------解决方案--------------------
能写这段代码的人也是神人。。哥也给他跪了。。
估计他本来是想pBuf=psm的,但是编译不过,所以干脆memcpy,不知道有强转
你搜一下看看其他地方有用到强转么。。
PlugShareMemory* psm = new PlugShareMemory;
memcpy(pBuf, &psm, sizeof(psm));
PlugUnMapViewOfFile(pBuf);
psm->pFirstHand = MemHand;
psm->pBuffer = pmm;
我搞不懂这个memcpy到底啥意思
pBuf表示pBuf指向的内存
&psm表示存放psm指针的内存
sizeof(psm)表示psm指针的大小为4
那么这个就是表示把psm指针的值拷贝到pBuf指向的内存中去
不知是不是这个意思,还有就是把一个指针的值拷贝到其他的一块的内存中去这个有意义吗?
我感觉还不如直接用pBuf = psm;
程序其他的地方也用到类似的
如:
if (content)
{
memcpy(&p->content, content, size);
}
有点晕,谁能给解释一下
------解决方案--------------------
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
(Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)
------解决方案--------------------
memcpy(pBuf, &psm, sizeof(psm));
执行后pBuf所指的四个字节中保存的是psm指针本身的地址
相当于这样 *(int)pBuf = *(int*)&psm
------解决方案--------------------
没听懂你意思,
大概你就是想说 拷贝一块内存,拷贝地址干嘛?
其实 CPU有两个寄存器 SS,SP ;(赵老师回复的并不无道理),如果发现时地址,SS指段,SP指位。然后发现时内存位置,就会去读,正如你所说的,发现PSM是一块地址,好解析地址,发现PSM里面藏着一个地址,好在跳。。跳过去了。。
不知道你说的是这个吗?
指针的强大无与伦比。哼哼
------解决方案--------------------
楼上,别理会太多了,汇编也不是什么神物,无非有几个串指令用来加速内存操作罢了
谁学汇编不得写几个小程序玩这个啊
我们不能像原始人那样纸带打孔编程,所以才会有memcpy,才会有operator=
抽象层次不同,解决的问题也不会一样的
------解决方案--------------------
能写这段代码的人也是神人。。哥也给他跪了。。
估计他本来是想pBuf=psm的,但是编译不过,所以干脆memcpy,不知道有强转
你搜一下看看其他地方有用到强转么。。