我应该按值还是通过指针返回struct?

时间:2018-03-22 10:45:24

标签: c

我在 C 中有一个函数,如下所示:

GamePiece* init_game_piece(PieceType pieceType, bool isWhite,int column, int row);

它分配内存,然后我释放对象(我只是启动它并将其复制到我创建的列表中),如下所示:

List* list = board->gamePieces[PIECES_INDEX(isWhite)][piecesArray[i]];
GamePiece* gamePiece = init_game_piece(piecesArray[i], isWhite,i,NON_PAWN_ROW_INDEX(isWhite));
insert_item(list, gamePiece);
board->boardData[gamePiece->gamePieceCell.row][gamePiece->gamePieceCell.column] = get_last_element(list);
free(gamePiece);



我可以更好地将函数内联并按值返回吗? 像这样:

GamePiece init_game_piece(PieceType pieceType, bool isWhite,int column, int row);


List* list = board->gamePieces[PIECES_INDEX(isWhite)][piecesArray[i]];
GamePiece gamePiece = init_game_piece(piecesArray[i], isWhite,i,NON_PAWN_ROW_INDEX(isWhite));
insert_item(list, &gamePiece);
board->boardData[gamePiece->gamePieceCell.row][gamePiece->gamePieceCell.column] = get_last_element(list);  


内联是否会通过它而不复制它?

1 个答案:

答案 0 :(得分:0)

内联很可能会以您怀疑的方式运作;结构的分配将被消除,如果你在启用优化的情况下构建,那么结构很可能只​​是在本地声明,所以如果函数没有内联,你甚至不会遭受复制惩罚。

但是,如果你在很多地方使用这个函数,如果函数很长,那么缺点是代码量会比你想象的要差一些,因为更多的代码意味着更糟糕的缓存行为,而现代CPU的性能在很大程度上取决于缓存。

然而,所有这些都是推测性的。除非你尝试,否则你真的不会确定,除非你有充分的理由相信你的程序的这一部分确实在性能上受到影响并且事实上需要优化,否则你不应该真的尝试。

但是如果你想尝试一下,很有可能尝试尝试,你很可能会以这种方式获得更好的表现。