質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1455閲覧

ループ内での構造体による変数生成でメモリ解放の必要はありますか?

Tololololo

総合スコア118

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/05/30 10:35

関数に引数として渡す値が多すぎるので構造体にして参照渡しをすることにしました。

ループ内で構造体の生成を行なう必要があるためループ内生成をしているのですが、
これは次のループに入る前に生成した構造体のメモリとかを解放する必要はありますか?
あるとすればどのように解放すれば良いでしょうか?

基本的に関数が終了すればそのスコープ内の変数データは消えるはずなのでいらないような気もしますが構造体を扱うようにしてから明らかにパフォーマンスが落ちたのでおかしいと思いました。

以下はサンプルコードです。
実際のコードも概ねこんな感じで書いてます。
一応クロックつけました。

c++

1 2#include <iostream> 3#include <time.h> 4 5using namespace std; 6 7struct aaa{ 8 int a; 9 int b; 10 int c; 11 int d; 12 int e; 13 int f; 14 int g; 15 int h; 16 int i; 17}; 18 19void ccc(aaa &get) 20{ 21 get.a = 111; 22} 23 24void bbb() 25{ 26 aaa send = {1,2,3,4,5,6,7,8,9}; 27 ccc(send); 28} 29 30int main() 31{ 32 33 clock_t start = clock(); 34 for(int i=0; i<100000000; i++) bbb(); 35 clock_t end = clock(); 36 cout<<(double)(end - start) / CLOCKS_PER_SEC; 37 return 0; 38} 39

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2019/05/30 12:40

えーと、このコードは何をしたいんです?
guest

回答1

0

自己解決

答えにくい質問だったために早めに解決済みにしました。

こめんとにて注釈をいただきました。

この質問は"多すぎる"引数簡略化のため構造体での参照渡しに移行したがパフォーマンスが悪化したので概念上、通常の引数との違いが構造体にあるのではないかという懸念からの質問でした。
よってサンプルコードもただの参照渡ししかしておりません。

しかし、改めて調べてみても概念上は引数はどのような形であっても通常の引数と扱い方は変わらないため今回のパフォーマンス悪化は別な要因があったのではないかと思います。

構造体引数に間違いはないようなので解決済みとします。

投稿2019/05/30 13:02

Tololololo

総合スコア118

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問