1.概要
面向对象的开发多了,对于内存的直接拷贝方法就疏忽了,很多时候,当需要没有那么丰富的时候很多时候,都是用的内存直接拷贝的方法。最近看一个纯粹的c语言的程序,发现大量基于内存的拷贝和比较的应用,今天我再做通讯的时候,突然想到,如果把一块内存就直接拷贝给通讯层,不就简单很多吗,类肯定不行,结构体可以吗,结构体可以但前提是得内存整齐的情况下,要不然结构体会多申请一些内存。总之实验失败了,但是把结果记录下来,因为这种直接拷贝的方法还是有很多可以简化开发的场景的。
2.代码
#include <QCoreApplication>
#include <QDebug>
#include <QByteArray>
#include <QIODevice>
#include <string.h>
//结构体拷贝
typedef struct myStruct
{
unsigned short data1;
unsigned char data2;
unsigned char data4;
unsigned char data5;
unsigned int data3;
} Mystruct;
//关于内存的直接拷贝
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Mystruct ms;
ms.data1 = 0x01;
ms.data2 = 0x3;
ms.data4 = 0x4;
ms.data5 = 0x5;
ms.data3 = 0x0202;
int size = sizeof(Mystruct);
char b[size];
std::memcpy(b, &ms, size);
for(int i=0;i<sizeof(b);i++){
int d = b[i];
qDebug()<<i<<":"<<d;
//cout<<i<<":"<<d;
}
qDebug()<<"size:"<<size;
qDebug()<<"结构体拷贝实验";
return a.exec();
}
3.运行结果
0 : 1
1 : 0
2 : 3
3 : 4
4 : 5
5 : 0
6 : 0
7 : 0
8 : 2
9 : 2
10 : 0
11 : 0
size: 12
�ṹ�忽��ʵ��
4.总结
这里我特意用了一个不整齐的内容,如果是整齐的内存不考虑大小端的情况下,直接拷贝是可以的,即使考虑内存对齐,如果涉及好结果,让对齐的部分在最后,也是可以根据有效直接直接拷贝有效数据的